为什么手动自相关与 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
我正在尝试了解 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