R でスライド相関を計算する方法
ローリング相関は、スライディング ウィンドウにわたる 2 つの時系列間の相関です。このタイプの相関関係の利点の 1 つは、2 つの時系列間の相関関係を経時的に視覚化できることです。
このチュートリアルでは、R でローリング相関を計算する方法について説明します。
R でローリング相関を計算する方法
15 か月間で 2 つの異なる製品 ( xとy ) の販売総数を表示する次のデータ フレームがあるとします。
#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 でローリング相関を計算するには、 zooパッケージのrollapply() 関数を使用できます。
この関数は次の構文を使用します。
rollapply(データ、幅、FUN、by.column=TRUE)
金:
- data:データフレームの名前
- width:スライディング相関のウィンドウの幅を指定する整数
- FUN:適用する関数。
- by.column:関数を各列に個別に適用するかどうかを指定します。これはデフォルトでは TRUE ですが、ローリング相関を計算するには、FALSE であることを指定する必要があります。
この関数を使用して、製品xと製品yの間の売上の 3 か月のローリング相関を計算する方法は次のとおりです。
#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 か月間の 2 つの製品の売上間の相関関係を返します。例えば:
- 1 か月目から 3 か月目の売上の相関は0.6546537でした。
- 2 ~ 4 か月間の売上相関は-0.6933752 でした。
- 3 ~ 5 か月間の売上相関は-0.2401922 でした。
等々。
この式を簡単に調整して、異なる期間のローリング相関を計算できます。たとえば、次のコードは、2 つの製品間の売上の 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 か月間の 2 つの製品売上間の相関関係を返します。例えば:
- 1 か月目から 6 か月目の売上の相関は0.5587415でした。
- 2 ~ 7 か月間の売上相関は0.4858553 でした。
- 3 ~ 8 か月間の売上相関は0.6931033 でした。
等々。
コメント
rollapply() 関数を使用するときは、次の点に注意してください。
- 相関関係を計算するには、幅(つまり、ドロップダウン ウィンドウ) が 3 以上である必要があります。
- 上記の式では、相関関係を計算したい 2 つの列が2と3の位置にあったため、 cor(x[,2],x[3]) を使用しました。関心のある列が別の位置にある場合は、これらの数値を調整します。