Как рассчитать скользящую корреляцию в R


Скользящие корреляции — это корреляции между двумя временными рядами в скользящем окне. Одним из преимуществ этого типа корреляции является то, что вы можете визуализировать корреляцию между двумя временными рядами во времени.

В этом руководстве объясняется, как рассчитать скользящие корреляции в R.

Как рассчитать скользящие корреляции в R

Предположим, у нас есть следующий фрейм данных, который отображает общее количество продуктов, проданных для двух разных продуктов ( x и y ) за 15-месячный период:

#create data
data <- data.frame(month=1:15,
 x=c(13, 15, 16, 15, 17, 20, 22, 24, 25, 26, 23, 24, 23, 22, 20),
 y=c(22, 24, 23, 27, 26, 26, 27, 30, 33, 32, 27, 25, 28, 26, 28))

#view first six rows
head(data)

 month x y
1 1 13 22
2 2 15 24
3 3 16 23
4 4 15 27
5 5 17 26
6 6 20 26

Чтобы вычислить скользящую корреляцию в R, мы можем использовать функцию rollapply() из пакета zoo .

Эта функция использует следующий синтаксис:

rollapply (данные, ширина, FUN, by.column = TRUE)

куда:

  • data: имя фрейма данных
  • ширина: целое число, указывающее ширину окна для скользящей корреляции.
  • FUN: функция, которую нужно применить.
  • by.column: указывает, следует ли применять функцию к каждому столбцу отдельно. По умолчанию это TRUE, но для расчета скользящей корреляции нам нужно указать FALSE.

Вот как использовать эту функцию для расчета 3-месячной скользящей корреляции продаж между продуктом x и продуктом y :

#calculate 3-month rolling correlation between sales for *x* and *y*
rollapply(data, width=3, function (x) cor(x[,2],x[,3]), by.column= FALSE )

 [1] 0.6546537 -0.6933752 -0.2401922 -0.8029551 0.8029551 0.9607689
 [7] 0.9819805 0.6546537 0.8824975 0.8170572 -0.9449112 -0.3273268
[13] -0.1889822

Эта функция возвращает корреляцию между продажами двух продуктов за предыдущие 3 месяца. Например:

  • Корреляция в продажах с 1 по 3 месяц составила 0,6546537 .
  • Корреляция в продажах со 2-го по 4-й месяцы составила -0,6933752.
  • Корреляция в продажах с 3 по 5 месяцы составила -0,2401922.

И так далее.

Мы можем легко изменить эту формулу, чтобы рассчитать скользящую корреляцию для другого периода времени. Например, в следующем коде показано, как рассчитать скользящую корреляцию продаж за 6 месяцев между двумя продуктами:

#calculate 6-month rolling correlation between sales for *x* and *y*
rollapply(data, width=6, function (x) cor(x[,2],x[,3]), by.column= FALSE )

 [1] 0.5587415 0.4858553 0.6931033 0.7564756 0.8959291 0.9067715 0.7155418
 [8] 0.7173740 0.7684468 0.4541476

Эта функция возвращает корреляцию между продажами двух продуктов за предыдущие 6 месяцев. Например:

  • Корреляция в продажах с 1 по 6 месяц составила 0,5587415 .
  • Корреляция в продажах со 2-го по 7-й месяц составила 0,4858553.
  • Корреляция в продажах с 3-го по 8-й месяц составила 0,6931033.

И так далее.

Заметки

При использовании функции rollapply() помните следующее:

  • Ширина (т. е. скользящее окно) должна быть 3 или больше для расчета корреляций.
  • В приведенных выше формулах мы использовали cor(x[,2],x[3]), потому что два столбца, между которыми мы хотели вычислить корреляции, находились в позициях 2 и 3.Измените эти числа, если интересующие вас столбцы расположены в разных позициях.

Связанный: Как рассчитать скользящую корреляцию в Excel

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.