ましょう IIDは各ドローすなわち長さ10のベクトルであるAR(1)プロセスから描画連結することによって形成された確率論的プロセスであり、はAR(1)プロセスの実現です。は同じプロセスから描画されますが、最初の10個の観測から独立しています。など。{ X 1、X 2、… 、X 10 } { X 11、X 12、… 、X 20 }
ACF何をします -それを呼び出すのように見て- ?仮定により、10個の観測値の各ブロックは他のすべてのブロックから独立しているため、長さラグの場合、はゼロであると期待していました。ρ (L ) ρ (L ) L ≥ 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)を連結することに焦点を当てることは注意散漫になるかもしれません-より簡単な例はこれです:
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()
## 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)
1
1.5年以上経ってからも、私の答えがあなたのお役に立てれば幸いです。少なくともRのスキルを向上させるのに役立ちました。
—
Candamir 2017年