为什么手动自相关与 acf() 结果不匹配?

Why manual autocorrelation does not match acf() results?

我正在尝试了解 acf 和 pacf。但是不明白为什么 acf() 结果不匹配简单的 cor() 和 lag1

我模拟了一个时间序列

set.seed(100)
ar_sim <- arima.sim(list(order = c(1,0,0), ar = 0.4), n = 100)

ar_sim_t <- ar_sim[1:99]
ar_sim_t1 <- ar_sim[2:100]

cor(ar_sim_t, ar_sim_t1)   ## 0.1438489
acf(ar_sim)[[1]][2]        ## 0.1432205

您能否解释一下为什么 acf() 中的第一个滞后相关性与系列和 lag1 之间的手动 cor() 不完全匹配?

估计具有已知均值和方差的离散过程的自相关的正确方法如下。例如,参见 Wikipedia.

n <- length(ar_sim)
l <- 1
mu <- mean(ar_sim)
s <- sd(ar_sim)

sum((ar_sim_t - mu)*(ar_sim_t1 - mu))/((n - l)*s^2)
#[1] 0.1432205

这个值不是 identical 由内置 stats::acf 计算的值,但非常接近它。

a.stats <- acf(ar_sim)[[1]][2]
a.manual <- sum((ar_sim_t - mu)*(ar_sim_t1 - mu))/((n - l)*sd(ar_sim)^2)

all.equal(a.stats, a.manual)  # TRUE
identical(a.stats, a.manual)  # FALSE

a.stats - a.manual
#[1] 1.110223e-16