R でスライド相関を計算する方法


ローリング相関は、スライディング ウィンドウにわたる 2 つの時系列間の相関です。このタイプの相関関係の利点の 1 つは、2 つの時系列間の相関関係を経時的に視覚化できることです。

このチュートリアルでは、R でローリング相関を計算する方法について説明します。

R でローリング相関を計算する方法

15 か月間で 2 つの異なる製品 ( xy ) の販売総数を表示する次のデータ フレームがあるとします。

 #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 つの列が23の位置にあったため、 cor(x[,2],x[3]) を使用しました。関心のある列が別の位置にある場合は、これらの数値を調整します。

関連: Excel でローリング相関を計算する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です