Deixe ser um processo estocástico formada pela concatenação iid retira um AR (1) do processo, onde cada sorteio é um vector de comprimento 10. Por outras palavras, { X 1 , X 2 , ... , X 10 } são realizações de um processo de RA (1); { X 11 , X 12 , … , X 20 } são extraídos do mesmo processo, mas são independentes das 10 primeiras observações; et cetera.
Como será o ACF de - chame de ρ ( l ) -? Eu esperava que ρ ( l ) fosse zero para defasagens de comprimento l ≥ 10 , pois, por suposição, cada bloco de 10 observações é independente de todos os outros blocos.
No entanto, quando simulo dados, recebo o seguinte:
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()
Por que existem autocorrelações tão longe de zero após o atraso 10?
Meu palpite inicial era que o burn-in no arima.sim era muito curto, mas recebo um padrão semelhante quando defini explicitamente, por exemplo, burn_in = 500.
o que estou perdendo?
Edit : Talvez o foco em concatenar AR (1) s seja uma distração - um exemplo ainda mais simples é este:
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)
fonte
Respostas:
Resumo executivo: Parece que você está confundindo ruído com autocorrelação verdadeira devido a um pequeno tamanho de amostra.
Você pode simplesmente confirmar isso aumentando o
k
parâmetro no seu código. Veja estes exemplos abaixo (usei o mesmoset.seed(987)
para manter a replicabilidade):k = 1000 (seu código original)
k = 2000
k = 5000
k = 10000
k = 50000
Essa sequência de imagens nos diz duas coisas:
fonte
It also becomes less and less likely to "stray" outside a confidence band
- você tem certeza que isso é verdade?qnorm((1 + ci)/2)/sqrt(x$n.used)