时间序列-复制R中的自相关值



我试图在R中复制acf()函数的值,但当我运行我的代码时,它无法实现。

x=rnorm(180)
meanT=mean(x)
r=vector();
n=length(x);
L=vector();
for (k in 0:10){
  for (i in 1:(n-k)){
    X1=x[1:(n-k)]
    X2=x[(1+k):n]
    r[k+1]=sum((X1-meanT)*(X2-meanT))/(sqrt(sum((X1-meanT)^2))*sqrt(sum((X2-meanT)^2)))
  }
  L[k+1]=k
}
round(r,3)
acf(x,10,plot=F)

知道为什么结果中会出现这种差异吗?问题出在循环中吗?

acf不使用通常的相关公式。见http://www.itl.nist.gov/div898/handbook/eda/section3/eda35c.htm。下面是acf可能在做什么的函数

myacf=function(x,lag.max=10){
  x <- as.matrix(as.ts(x))
  x <- sweep(x, 2, colMeans(x, na.rm = TRUE), check.margin = FALSE)
  n <- as.integer(nrow(x))
  macf=as.numeric(sapply(0:lag.max,function(k)
                  sum(x[1:(n-k)]*x[(k+1):n])/sum(x^2)))
  names(macf)=0:lag.max;
  macf
}
## Examples from Venables & Ripley ?acf
# require(graphics)
rbind(acf(lh,10,plot=F)$acf,
myacf(lh,10)) 

最新更新