Rがlag-k自己相関を計算する方法を理解しようとしています(明らかに、MinitabとSASで使用されているのと同じ式です)ので、シリーズとそのk-lagedバージョンに適用されるExcelのCORREL関数の使用と比較できます。RとExcel(CORRELを使用)は、わずかに異なる自己相関値を提供します。
また、ある計算が他の計算よりも正しいかどうかを調べることにも興味があります。
Rがlag-k自己相関を計算する方法を理解しようとしています(明らかに、MinitabとSASで使用されているのと同じ式です)ので、シリーズとそのk-lagedバージョンに適用されるExcelのCORREL関数の使用と比較できます。RとExcel(CORRELを使用)は、わずかに異なる自己相関値を提供します。
また、ある計算が他の計算よりも正しいかどうかを調べることにも興味があります。
回答:
正確な方程式は次のとおりです。Venables、WN and Ripley、BD(2002)Modern Applied Statistics with S. Fourth Edition。スプリンガー出版。例を挙げましょう:
### simulate some data with AR(1) where rho = .75
xi <- 1:50
yi <- arima.sim(model=list(ar=.75), n=50)
### get residuals
res <- resid(lm(yi ~ xi))
### acf for lags 1 and 2
cor(res[1:49], res[2:50]) ### not quite how this is calculated by R
cor(res[1:48], res[3:50]) ### not quite how this is calculated by R
### how R calculates these
acf(res, lag.max=2, plot=F)
### how this is calculated by R
### note: mean(res) = 0 for this example, so technically not needed here
c0 <- 1/50 * sum( (res[1:50] - mean(res)) * (res[1:50] - mean(res)) )
c1 <- 1/50 * sum( (res[1:49] - mean(res)) * (res[2:50] - mean(res)) )
c2 <- 1/50 * sum( (res[1:48] - mean(res)) * (res[3:50] - mean(res)) )
c1/c0
c2/c0
など(res[1:47]
およびres[4:50]
、ラグ3など)。
自己相関(および場合によってはExcelが使用するもの)を計算する単純な方法は、ベクターの2つのコピーを作成し、最初のコピーから最初のn個の要素を削除し、2番目のコピーから最後のn個の要素を削除することです(nはから計算しています)。次に、これらの2つのベクトルを関数に渡し、相関を計算します。この方法は問題なく、妥当な答えを提供しますが、比較される2つのベクトルが実際には同じものの尺度であるという事実を無視します。
改善されたバージョン(Wolfgangで示されている)は、平均と分散を計算するためにベクトル全体を使用することを除いて、通常の相関と同様の機能です。
R
の式はさらに分析され、stats.stackexchange.com / questions / 81754 /…で説明されています。