我正在尝试复制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)
知道结果中出现这种差异的原因吗?问题出在循环中吗?
答案 0 :(得分:1)
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))