让是一个随机过程,它是通过连接来自 AR(1) 过程的 iid 绘制形成的,其中每个绘制是一个长度为 10 的向量。换句话说,是 AR(1) 过程的实现;来自同一个过程,但独立于前 10 个观察值;等等。
的 ACF——称之为 ——会是什么样子?我期望对于长度为的滞后为零,因为根据假设,10 个观察的每个块独立于所有其他块。
但是,当我模拟数据时,我得到了这个:
simulate_ar1 <- function(n, burn_in=NA) {
return(as.vector(arima.sim(list(ar=0.9), n, n.start=burn_in)))
}
simulate_sequence_of_independent_ar1 <- function(k, n, burn_in=NA) {
return(c(replicate(k, simulate_ar1(n, burn_in), simplify=FALSE), recursive=TRUE))
}
set.seed(987)
x <- simulate_sequence_of_independent_ar1(1000, 10)
png("concatenated_ar1.png")
acf(x, lag.max=100) # Significant autocorrelations beyond lag 10 -- why?
dev.off()
为什么在滞后 10 之后自相关还远未达到零?
我最初的猜测是 arima.sim 中的老化时间太短,但是当我明确设置例如 burn_in=500 时,我得到了类似的模式。
我错过了什么?
编辑:也许对连接 AR(1)s 的关注会分散注意力——一个更简单的例子是:
set.seed(9123)
n_obs <- 10000
x <- arima.sim(model=list(ar=0.9), n_obs, n.start=500)
png("ar1.png")
acf(x, lag.max=100)
dev.off()
基本上为零)下,我对显着非零自相关的大块感到惊讶。我可以做?
另一个编辑:也许这里发生的所有事情都是,估计的 ACF,本身是非常自相关的。例如,这里是的联合分布,它们的真实值基本上为零() :
## Look at joint sampling distribution of (acf(60), acf(61)) estimated from AR(1)
get_estimated_acf <- function(lags, n_obs=10000) {
stopifnot(all(lags >= 1) && all(lags <= 100))
x <- arima.sim(model=list(ar=0.9), n_obs, n.start=500)
return(acf(x, lag.max=100, plot=FALSE)$acf[lags + 1])
}
lags <- c(60, 61)
acf_replications <- t(replicate(1000, get_estimated_acf(lags)))
colnames(acf_replications) <- sprintf("acf_%s", lags)
colMeans(acf_replications) # Essentially zero
plot(acf_replications)
abline(h=0, v=0, lty=2)