Sei ein stochastischer Prozess, der durch Verketten von iid-Draws aus einem AR (1) -Prozess gebildet wird, wobei jeder Draw ein Vektor der Länge 10 ist. Mit anderen Worten, sind Realisierungen eines AR (1) -Prozesses; stammen aus demselben Prozess, sind jedoch unabhängig von den ersten 10 Beobachtungen. und so weiter.{ X 1 , X 2 , … , X 10 } { X 11 , X 12 , … , X 20 }
Wie wird der ACF von - nenne es \ rho \ left (l \ right) - aussehen? Ich hatte erwartet, dass \ rho \ left (l \ right) für Verzögerungen der Länge l \ geq 10 Null ist, da angenommen wird, dass jeder Block von 10 Beobachtungen von allen anderen Blöcken unabhängig ist.ρ ( l ) ρ ( l ) l ≥ 10
Wenn ich jedoch Daten simuliere, erhalte ich Folgendes:
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()
Warum gibt es nach Verzögerung 10 Autokorrelationen, die so weit von Null entfernt sind?
Meine anfängliche Vermutung war, dass das Einbrennen in arima.sim zu kurz war, aber ich erhalte ein ähnliches Muster, wenn ich explizit zB burn_in = 500 setze.
Was vermisse ich?
Bearbeiten : Vielleicht ist der Fokus auf die Verkettung von AR (1) s eine Ablenkung - ein noch einfacheres Beispiel ist dies:
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()
Ich bin überrascht von den großen Blöcken von Autokorrelationen ungleich Null bei so langen Verzögerungen (wobei der wahre ACF im Wesentlichen Null ist). Sollte ich sein?
Noch eine Änderung : Vielleicht ist alles, was hier vor sich geht, dass , der geschätzte ACF, selbst extrem autokorreliert ist. Hier ist zum Beispiel die gemeinsame Verteilung von , deren wahre Werte im Wesentlichen Null sind ( ). :: ( ρ (60), ρ (61))0,960≈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)
quelle
Antworten:
Zusammenfassung: Es scheint, dass Sie Rauschen aufgrund einer kleinen Stichprobengröße für echte Autokorrelation halten.
Sie können dies einfach bestätigen, indem Sie den
k
Parameter in Ihrem Code erhöhen . Sehen Sie sich diese Beispiele unten an (ich habe dasselbeset.seed(987)
durchgehend verwendet, um die Replizierbarkeit aufrechtzuerhalten):k = 1000 (Ihr ursprünglicher Code)
k = 2000
k = 5000
k = 10000
k = 50000
Diese Folge von Bildern sagt uns zwei Dinge:
Beachten Sie, dass ich die beobachtete Autokorrelation als und die wahre Autokorrelation als .ρ(l)ρ^( l ) ρ ( l )
quelle
It also becomes less and less likely to "stray" outside a confidence band
- Bist du sicher, dass das stimmt?qnorm((1 + ci)/2)/sqrt(x$n.used)