Creazione di valori casuali auto-correlati in R


11

Stiamo provando a creare valori casuali auto-correlati che verranno utilizzati come timeseries. Non abbiamo dati a cui ci riferiamo e vogliamo solo creare il vettore da zero.

Da un lato abbiamo ovviamente bisogno di un processo casuale con distribuzione e sua SD.

D'altra parte deve essere descritta l'autocorrelazione che influenza il processo casuale. I valori del vettore sono autocorrelati con intensità decrescente su più timelag. ad es. lag1 ha 0,5, lag2 0,3, lag1 0,1 ecc.

Quindi alla fine il vettore dovrebbe apparire qualcosa che: 2, 4, 7, 11, 10, 8, 5, 4, 2, -1, 2, 5, 9, 12, 13, 10, 8, 4, 3, 1, -2, -5

e così via.

Risposte:


11

In realtà spesso mi imbatto in quel problema. I miei due modi preferiti per generare una serie temporale con l'auto-correlazione in R dipendono dal fatto che io voglia un processo stazionario o meno.

Per una serie storica non stazionaria uso un movimento browniano. Ad esempio, per una lunghezza di 1000 faccio:

x <- diffinv(rnorm(999))

Per una serie storica fissa filmo un rumore gaussiano. Ad esempio questo sembra:

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

In tal caso, l'auto-correlazione in ritardo è 0 se . In altri casi, dobbiamo calcolare la correlazione tra somme di variabili. Ad esempio per la covarianza èττ>2τ=1

Cov(X1;X2)=Cov(Y1+Y2+Y3;Y2+Y3+Y4)=Vun'r(Y2)+Vun'r(Y3)=2.

Quindi vedi che l'auto-covarianza scende linearmente verso l'alto fino a dove è la lunghezza del filtro.nnn

Puoi anche voler fare lunghe serie temporali di memoria (come il movimento frazionario di Brownian), ma questo è più coinvolto. Ho un'implementazione R del metodo Davies-Harte che posso inviarti se lo desideri.


Per ottenere realizzazioni di serie storiche di lunga memoria, consiglierei il libro di Wornell del 1996 (link: books.google.cl/books/about/… ), :-). Sebbene la tracciabilità dei lunghi processi di memoria non sia "così" facile, puoi comunque farlo.
Néstor,

Ho usato il tuo approccio e funziona in generale, ma ottengo lievi deviazioni tra la funzione target utilizzata nel filtro e la risultante funzione di autocorrelazione. Dai
nnn

7

R(τ)τ

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

Data questa matrice di covarianza, campionate i dati da un gaussiano multivariato con la matrice di covarianza data Σ

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

5

X(t)=un'X(t-1)+e(t)e(0)X(0)=e(0)X(1)=un'X(0)+e(1)e(io)X(io)e(io)e(io)


4
Probabilmente vale la pena sottolineare l'esistenza della arima.sim()funzione qui.
fmark

Sicuramente quelli che ora R dovrebbero dare questi suggerimenti per l'implementazione in R come l'OP vuole sapere.
Michael R. Chernick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.