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)
sumber
Jawaban:
Ringkasan eksekutif: Tampaknya Anda salah mengira kebisingan untuk autokorelasi sejati karena ukuran sampel yang kecil.
Anda cukup mengkonfirmasi ini dengan meningkatkan
k
parameter dalam kode Anda. Lihat contoh-contoh di bawah ini (Saya telah menggunakan yang samaset.seed(987)
untuk mempertahankan replikasi):k = 1000 (kode asli Anda)
k = 2000
k = 5000
k = 10000
k = 50000
Urutan gambar ini memberi tahu kita dua hal:
Perhatikan bahwa saya merujuk pada autokorelasi yang diamati sebagaiρ^(l) dan dengan autokorelasi yang sebenarnya sebagaiρ(l) .
sumber
It also becomes less and less likely to "stray" outside a confidence band
- apakah kamu yakin itu benar?qnorm((1 + ci)/2)/sqrt(x$n.used)
, yaitu