Criando valores aleatórios correlacionados automaticamente em R


11

Estamos tentando criar valores aleatórios correlacionados automaticamente que serão usados ​​como séries temporais. Não temos dados existentes a que nos referimos e queremos apenas criar o vetor do zero.

Por um lado, é claro que precisamos de um processo aleatório com distribuição e seu SD.

Por outro lado, a autocorrelação que influencia o processo aleatório deve ser descrita. Os valores do vetor são autocorrelacionados com força decrescente ao longo de vários timelags. por exemplo, lag1 tem 0,5, lag2 0,3, lag1 0,1 etc.

Portanto, no final, o vetor deve parecer algo que: 2, 4, 7, 11, 10, 8, 5, 4, 2, -1, 2, 5, 9, 12, 13, 10, 8, 4, 3, 1, -2, -5

e assim por diante.

Respostas:


11

Na verdade, eu sempre encontro esse problema. Minhas duas maneiras favoritas de gerar uma série temporal com correlação automática em R dependem se eu quero ou não um processo estacionário.

Para uma série temporal não estacionária, uso um movimento browniano. Por exemplo, para um comprimento de 1000, faço:

x <- diffinv(rnorm(999))

Para uma série temporal estacionária, filtrei um ruído gaussiano. Por exemplo, isso se parece com:

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

Nesse caso, a correlação automática no atraso é 0 se τ > 2 . Em outros casos, temos que calcular a correlação entre somas de variáveis. Por exemplo, para τ = 1, a covariância éττ>2τ=1

Cov(X1 1;X2)=Cov(Y1 1+Y2+Y3;Y2+Y3+Y4)=Vumar(Y2)+Vumar(Y3)=2)

Então você vê que a covariância automática cai linearmente até onde n é o comprimento do filtro.nn

Você também pode fazer longas séries temporais de memória (como movimento browniano fracionário), mas isso é mais complicado. Tenho uma implementação R do método Davies-Harte que posso enviar, se você desejar.


Para obter realizações de séries temporais de memória longa, recomendo o livro de Wornell de 1996 (link: books.google.cl/books/about/… ), :-). Embora a rastreabilidade dos processos de memória longa não seja "fácil", você ainda pode fazê-lo.
Néstor

Usei sua abordagem e ela funciona em geral, mas recebo pequenos desvios entre a função de destino usada no filtro e a função de autocorrelação resultante.
nnn

7

R(τ)τ

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

Σ

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

5

X(t)=umaX(t-1 1)+e(t)e(0 0)X(0 0)=e(0 0)X(1 1)=umaX(0 0)+e(1 1)e(Eu)X(Eu)e(Eu)e(Eu)


4
Provavelmente vale a pena apontar a existência da arima.sim()função aqui.
fmark 27/05

Certamente aqueles que agora R devem fazer essas sugestões para implementação em R, como o OP deseja saber.
Michael R. Chernick 27/05
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.