Autocorrelação de processos de RA (1) independentes concatenados

8

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.{Xt}{X1,X2,,X10}{X11,X12,,X20}

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.Xρ(eu)ρ(eu)eu10

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()

função de autocorrelação de amostra para x

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()

acf de baunilha simples ar1

ρ(eu)=0,9eu


ρ^(ρ^(60),ρ^(61))0,9600 0

## 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)

distribuição amostral da estimativa de acf

Adrian
fonte
1
Espero que minha resposta ainda seja útil para você, mais de 1,5 anos depois. Pelo menos, me ajudou a melhorar minhas habilidades em R.
Candamir

Respostas:

3

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 kparâmetro no seu código. Veja estes exemplos abaixo (usei o mesmo set.seed(987)para manter a replicabilidade):

k = 1000 (seu código original)

1000 simulações

k = 2000

2000 simulações

k = 5000

5000 simulações

k = 10000

10000 simulações

k = 50000

50000 simulações

Essa sequência de imagens nos diz duas coisas:

  • ρ^(eu)eu>10
  • ρ^(eu)eu>10ρ^(eu)eu10ρ^(eu)=ρ(eu)=0,9eu

ρ^(eu)ρ(eu)

Candamir
fonte
1
O ACF de amostra é autocorrelacionado, portanto, não há ruído branco . Fora isso, concordo, é apenas uma questão de tamanho de ruído / amostra.
Adrian
@ Adrian Você está correto. Eu alterei minha resposta de acordo.
Candamir
It also becomes less and less likely to "stray" outside a confidence band- você tem certeza que isso é verdade?
Adrian
1
qnorm((1 + ci)/2)/sqrt(x$n.used)cdf(1-α/2)/n
1
1/nρ^(eu)eu>10