Création de valeurs aléatoires auto-corrélées dans R


11

Nous essayons de créer des valeurs aléatoires auto-corrélées qui seront utilisées comme série temporelle. Nous n'avons aucune donnée existante à laquelle nous nous référons et souhaitons simplement créer le vecteur à partir de zéro.

D'une part, nous avons bien sûr besoin d'un processus aléatoire avec distribution et sa SD.

D'autre part, l'autocorrélation influençant le processus aléatoire doit être décrite. Les valeurs du vecteur sont autocorrélées avec une force décroissante sur plusieurs timelags. par exemple lag1 a 0,5, lag2 0,3, lag1 0,1 etc.

Donc, à la fin, le vecteur devrait ressembler à: 2, 4, 7, 11, 10, 8, 5, 4, 2, -1, 2, 5, 9, 12, 13, 10, 8, 4, 3, 1, -2, -5

etc.

Réponses:


11

En fait, je rencontre souvent ce problème. Mes deux façons préférées de générer une série chronologique avec auto-corrélation dans R dépendent de si je veux un processus stationnaire ou non.

Pour une série temporelle non stationnaire, j'utilise un mouvement brownien. Par exemple, pour une longueur de 1000 je fais:

x <- diffinv(rnorm(999))

Pour une série temporelle stationnaire, je filtre un bruit gaussien. Par exemple, cela ressemble à:

x <- filter(rnorm(1000), filter=rep(1,3), circular=TRUE)

Dans ce cas, l'auto-corrélation au décalage est 0 si τ > 2 . Dans d'autres cas, nous devons calculer la corrélation entre les sommes de variables. Par exemple, pour τ = 1, la covariance estττ>2τ=1

Cov(X1;X2)=Cov(Oui1+Oui2+Oui3;Oui2+Oui3+Oui4)=Vuner(Oui2)+Vuner(Oui3)=2.

Vous voyez donc que l'auto-covariance descend linéairement jusqu'à n est la longueur du filtre.nn

Vous pouvez également faire de longues séries temporelles de mémoire (comme le mouvement brownien fractionnaire), mais cela est plus complexe. J'ai une implémentation R de la méthode Davies-Harte que je peux vous envoyer si vous le souhaitez.


Pour obtenir des réalisations de longues séries chronologiques de mémoire, je recommanderais le livre de Wornell de 1996 (lien: books.google.cl/books/about/… ), :-). Bien que la facilité de traitement des longs processus de mémoire ne soit pas aussi simple que cela, vous pouvez toujours le faire.
Néstor

J'ai utilisé votre approche et cela fonctionne en général, mais j'obtiens de légers écarts entre la fonction cible utilisée dans le filtre et la fonction d'autocorrélation résultante. Veuillez jeter un œil à cette question: stats.stackexchange.com/questions/176722/…
nnn

7

R(τ)τ

Σ=[R(0)R(1)...R(N)R(1)R(0)...R(N-1)...R(N)R(N-1)...R(0)]

Σ

F(X)=1(2π)N/2|Σ|1/2exp(-12(X-μ)TΣ-1(X-μ)),
μ

5

X(t)=uneX(t-1)+e(t)e(0)X(0)=e(0)X(1)=uneX(0)+e(1)e(je)X(je)e(je)e(je)


4
Il vaut probablement la peine de souligner l'existence de la arima.sim()fonction ici.
fmark

Bien sûr, ceux qui maintenant R devraient faire ces suggestions pour la mise en œuvre dans R comme le PO veut savoir.
Michael R. Chernick
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.