Membiarkan menjadi proses stokastik yang dibentuk dengan menggabungkan iid draw dari proses AR (1), di mana setiap draw adalah vektor dengan panjang 10. Dengan kata lain, adalah realisasi dari proses AR (1); diambil dari proses yang sama, tetapi independen dari 10 pengamatan pertama; dan lain-lain.
Apa yang akan ACF dari - sebut saja -- terlihat seperti? Saya mengharapkan menjadi nol untuk kelambatan panjang karena, dengan asumsi, setiap blok pengamatan 10 independen dari semua blok lainnya.
Namun, ketika saya mensimulasikan data, saya mendapatkan ini:
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()
Mengapa ada autokorelasi sejauh ini dari nol setelah lag 10?
Dugaan awal saya adalah bahwa burn-in di arima.sim terlalu pendek, tapi saya mendapatkan pola yang sama ketika saya secara eksplisit mengatur misal burn_in = 500.
Apa yang saya lewatkan?
Sunting : Mungkin fokus pada menggabungkan AR (1) s adalah pengalih perhatian - contoh yang lebih sederhana adalah ini:
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()
Saya terkejut dengan blok besar autokorelasi signifikan bukan pada kelambatan yang panjang (di mana ACF benar pada dasarnya nol). Haruskah aku
Sunting lain : mungkin semua yang terjadi di sini adalah itu, perkiraan ACF, itu sendiri sangat berkorelasi. Sebagai contoh, inilah distribusi gabungan dari, yang nilainya sebenarnya pada dasarnya nol ():
## 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)