Как рассчитать скользящую корреляцию в 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