R vs.Excel中的自相关公式


13

我试图弄清楚R如何计算滞后k自相关(显然,它与Minitab和SAS使用的公式相同),以便可以将其与使用适用于该系列及其k滞后版本的Excel CORREL函数进行比较。R和Excel(使用CORREL)给出的自相关值略有不同。

我也想知道一种计算是否比另一种更正确。


R的公式会在stats.stackexchange.com/questions/81754/…中进行进一步分析和说明。
ub

Answers:


17

确切的方程式在:Venables,WN和Ripley,BD(2002)Modern Applied Statistics with S.第四版中给出。施普林格出版社。我举一个例子:

### 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中复制它(仅适用于使用Excel的学生)。
Galit Shmueli 2011年

11

天真的方法来计算自动相关(可能是Excel使用的方法)是创建向量的2个副本,然后从第一个副本中删除第一个n个元素,从第二个副本中删除最后一个n个元素(其中n是您的滞后时间)正在计算)。然后将这两个向量传递给函数以计算相关性。这种方法是可以的,并且会给出一个合理的答案,但是它忽略了被比较的两个向量实际上是同一事物的度量的事实。

改进的版本(如Wolfgang所示)与正则相关性相似,只是它使用整个向量来计算均值和方差。


3
另一个差异是因数1 / n而不是1 /(nk),其中n是序列的长度,k是滞后数。这是为了确保自相关矩阵是正定的。
罗布·海恩德曼

1
@Rob:我相信Excel的CORREL公式确实使用n(而不是nk)。例如,对于滞后1 ACF,如果使用COVAR(res [1:49],res [2:50])/(STDEVP(res [1:49])* STDEVP,则会得到相同的结果(使用Wolfgang的表示法) (res [2:50]))和函数COVAR和STDEVP是“填充”统计信息。
Galit Shmueli,2011年

@加里特 即使使用COVAR和STDEVP,在你的代码中的分母是49,但自相关的最佳定义将用50
罗布·海德门

1
1 / n与1 /(nk)点除了上面的其他点外,还有助于理解。但是对于实际/观察到的数字,只要保持一致就无关紧要,因为该术语同时出现在分子和分母中,因此将被抵消。如果在分子和分母中使用不同的分数,您可能会遇到问题。
格雷格·斯诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.