Как рассчитать скользящую корреляцию в 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 xy 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)
Золото:
- данные: Имя фрейма данных.
- ширина: целое число, определяющее ширину окна для скользящей корреляции.
- 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