14 votos

Creación de valores aleatorios auto-correlacionados en R

Estamos tratando de crear auto-correlación de valores aleatorios que serán utilizados como unicc. No tenemos datos existentes nos referimos a y sólo quiere crear el vector a partir de cero.

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

En el otro lado de la autocorrelación que influyen en el proceso aleatorio se ha descrito. Los valores del vector son autocorrelated con la disminución de la fuerza a lo largo de varios timelags. por ejemplo, lag1 tiene 0.5, lag2 0.3, lag1 0.1 etc.

Así que al final, el vector debe ser 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í sucesivamente.

18voto

JMW.APRN Puntos 21

De hecho, me funcionan a menudo en ese problema. Dos de mis formas favoritas para generar una serie de tiempo con auto-correlación de R depende de si quiero que un proceso estacionario o no.

Para una serie de tiempo estacionaria yo uso un movimiento Browniano. Por ejemplo, para una longitud de 1000 que yo hago:

x <- diffinv(rnorm(999))

Para una serie de tiempo estacionaria yo un filtro de ruido Gaussiano. Por ejemplo, esto se ve así:

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

En ese caso, la función de auto-correlación en el gal $\tau$ es 0 si $\tau > 2$. En otros casos, tenemos que calcular la correlación entre las sumas de las variables. Por ejemplo, para $\tau = 1$ la covarianza es

$$ Cov(X_1;X_2) = Cov(Y_1+Y_2+Y_3; Y_2+Y_3+Y_4) = Var(Y_2) + Var(Y_3) = 2. $$

So you see that the auto-covariance drops down linearly up until $n$ where $$ n es la longitud del filtro.

Puede que también desee hacer memoria larga serie de tiempo (como el movimiento Browniano fraccional), pero esto es más complicado. Tengo un R implementention de Davies-Harte método que puedo enviar si usted desea.

7voto

Andrew Puntos 126

Si usted tiene un determinado autocovariance función, el mejor modelo (en términos de trazabilidad) que puedo pensar es un multivariante de gauss proceso, donde, dada la autocovariance función de $R(\tau)$ en el gal $\tau$, se puede formar la matriz de covarianza fácilmente,

$$\Sigma=\left[ \begin{array}{cccc} R(0) & R(1) & ... & R(N) \\ R(1) & R(0) & ... & R(N-1) \\ \vdots & \ddots & ... & \vdots \\ R(N) & R(N-1) & ... & R(0) \end{array} \right]$$

Dada esta matriz de covarianza, que muestra datos de una multivariante de gauss a la matriz de covarianza $\Sigma$, es decir, muestra un vector a partir de la distribución $$f(\vec{x})=\frac{1}{(2\pi)^{N/2}|\Sigma|^{1/2}}\text{exp}\left(-\frac{1}{2}(\vec{x}-\vec{\mu})^T\Sigma^{-1}(\vec{x}-\vec{\mu})\right)\text{,}$$ donde $\vec{\mu}$ es la media del vector.

5voto

mat_geek Puntos 1367

Puede generar una secuencia correlacionada construyendo un proceso autorregresivo. Por ejemplo$X(t)=a X(t-1) + e(t)$. Genere$e(0)$ utilizando un generador de números aleatorios para la distribución elegida. Entonces Let$X(0) = e(0)$ Get$X(1)=aX(0) +e(1)$ y así sucesivamente. El$e(i)$ se elige al azar usando su distribución de números aleatorios. Para dar$X(i)$ la media y la desviación estándar que desea, puede deducirla de la media y la varianza de la secuencia de ruido$e(i)$. Elija$e(i)$ apropiadamente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X