Crear valores aleatorios auto correlacionados en R

11

Estamos tratando de crear valores aleatorios correlacionados automáticamente que se utilizarán como series de tiempo. No tenemos datos existentes a los que nos referimos y solo queremos crear el vector desde cero.

Por un lado, por supuesto, necesitamos un proceso aleatorio con distribución y su SD.

Por otro lado, debe describirse la autocorrelación que influye en el proceso aleatorio. Los valores del vector están autocorrelacionados con fuerza decreciente a lo largo de varios intervalos de tiempo. por ejemplo, lag1 tiene 0.5, lag2 0.3, lag1 0.1 etc.

Entonces, al final, el vector debería verse algo que: 2, 4, 7, 11, 10, 8, 5, 4, 2, -1, 2, 5, 9, 12, 13, 10, 8, 4, 3, 1, -2, -5

y así.

Fabian Stolz
fuente

Respuestas:

11

De hecho, a menudo me encuentro con ese problema. Mis dos formas favoritas de generar una serie temporal con autocorrelación en R dependen de si quiero un proceso estacionario o no.

Para una serie temporal no estacionaria, uso un movimiento browniano. Por ejemplo, para una longitud de 1000 hago:

x <- diffinv(rnorm(999))

Para una serie temporal estacionaria, filtro un ruido gaussiano. Por ejemplo, esto se ve así:

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

En ese caso, la autocorrelación en el retraso es 0 si τ > 2 . En otros casos, tenemos que calcular la correlación entre sumas de variables. Por ejemplo para τττ>2 la covarianza esτ=1

Cov(X1;X2)=Cov(Y1+Y2+Y3;Y2+Y3+Y4 4)=Vunar(Y2)+Vunar(Y3)=2)

Entonces ves que la autocovarianza cae linealmente hacia arriba hasta norte donde es la longitud del filtro.norte

También puede querer hacer series de tiempo de memoria largas (como el movimiento browniano fraccional), pero esto es más complicado. Tengo una implementación R del método Davies-Harte que puedo enviarle si lo desea.

gui11aume
fuente
Para obtener realizaciones de series de tiempo de memoria larga, recomendaría el libro de Wornell de 1996 (enlace: books.google.cl/books/about/… ), :-). Aunque la trazabilidad de los procesos de memoria larga no es "tan" fácil, aún puede hacerlo.
Néstor
Utilicé su enfoque y funciona en general, pero obtengo ligeras desviaciones entre la función de destino utilizada en el filtro y la función de autocorrelación resultante. Eche un vistazo a esta pregunta: stats.stackexchange.com/questions/176722/…
nnn
7

R(τ)τ , puede formar la matriz de covarianza fácilmente,

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

Σ

F(X)=1(2π)norte/ /2El |ΣEl |1/ /2Exp(-12(X-μ)TΣ-1(X-μ)),
μ
Néstor
fuente
5

Puede generar una secuencia correlacionada mediante la construcción de un proceso autorregresivo. Por ejemplo, un proceso AR (1) X(t)=unaX(t-1)+mi(t)mi(0 0)X(0 0)=mi(0 0)X(1)=unaX(0 0)+mi(1)mi(yo)X(yo)mi(yo)mi(yo)

Michael R. Chernick
fuente
44
Probablemente valga la pena señalar la existencia de la arima.sim()función aquí.
fmark
Claro, aquellos que ahora R deben hacer esas sugerencias para la implementación en R como el OP quiere saber.
Michael R. Chernick