我试图弄清楚 R 如何计算 lag-k 自相关(显然,它与 Minitab 和 SAS 使用的公式相同),以便我可以将其与应用于系列及其 k 滞后版本的 Excel 的 CORREL 函数进行比较。R 和 Excel(使用 CORREL)给出的自相关值略有不同。
我也很想知道一种计算是否比另一种更正确。
我试图弄清楚 R 如何计算 lag-k 自相关(显然,它与 Minitab 和 SAS 使用的公式相同),以便我可以将其与应用于系列及其 k 滞后版本的 Excel 的 CORREL 函数进行比较。R 和 Excel(使用 CORREL)给出的自相关值略有不同。
我也很想知道一种计算是否比另一种更正确。
确切的方程式在:Venables, WN 和 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 元素,从第二个副本中删除最后 n 个元素(其中 n 是您的滞后正在计算)。然后将这两个向量传递给函数以计算相关性。这种方法是可以的,并且会给出一个合理的答案,但它忽略了一个事实,即被比较的 2 个向量实际上是对同一事物的度量。
改进的版本(如 Wolfgang 所示)是与正则相关性相似的函数,只是它使用整个向量来计算均值和方差。