Tienes dos problemas y uno de ellos es interesante.
Sin un término de ruido, la serie ya no es estacionaria. Su valor aumenta asintóticamente, pero definitivamente, hacia 1:
![Figure 1]()
ARIMA sólo se aplica a los modelos estacionarios, y estos datos obviamente no son de un modelo estacionario. Eso no es terriblemente interesante. Lo que es Lo interesante es que el problema persiste incluso con el ruido.
¿Qué ocurre entonces cuando añadimos un poco de ruido?
![Figure 2]()
Es obvio que todavía no es estacionario pero la razón es que los valores iniciales son inconsistentes con todo lo que sigue.
Hay que eliminar un "periodo de rodaje" durante el cual los valores simulados empiezan a comportarse como lo hará el resto de la serie. Esto es lo que parece cuando quitamos el primer n_0=30 valores:
![Figure 3]()
¿Qué hace arima
¿regresar?
Coefficients:
ar1 intercept
0.9074 0.9872
s.e. 0.0309 0.0088
0.9074 \pm 0.0309 es una gran estimación de \phi=0.9.
Repetí este proceso 99 veces más, produciendo 100 estimaciones de \phi junto con sus errores estándar. Aquí hay un gráfico de esas estimaciones y de los errores estándar 90\% límites de confianza (fijados en 1.645 errores estándar por encima y por debajo de las estimaciones):
![Figure 4]()
La línea gris horizontal se sitúa en \phi=0.9 como referencia. Los intervalos de confianza rojos son los que no se superponen a la referencia: hay 12 de ellos, lo que indica que el nivel de confianza es de alrededor de 88\%, que coincide (dentro del error de muestreo) con el valor previsto de 90\%. La línea negra horizontal es la estimación media. Es un poco más baja que \phi, tal vez porque después de incluso 200 pasos de tiempo la serie aún no es del todo estacionaria. (Tampoco se espera que la distribución de la estimación sea simétrica: 1 es un límite importante y hará que la distribución esté sesgada hacia los valores más pequeños).
Aquí está el mismo estudio pero con 2000 pasos de tiempo en cada iteración:
![Figure 5]()
El sesgo en la estimación casi ha desaparecido.
Otra solución es empezar a generar la serie en su valor medio asintótico (igual a cnst/(1-phi)
en el R
código más abajo). Pero eso requiere conocer la asíntota, que puede ser más difícil de conseguir en modelos más complejos, por lo que es bueno conocer la técnica de descartar el segmento inicial de una serie simulada.
Por cierto, aquí hay una forma razonablemente eficiente y compacta de generar estos conjuntos de datos:
phi <- 0.9 # AR(1) coefficient
n <- 200 # Total number of time steps after the initial value
cnst <- 0.1 # Intercept
sigma <- 0.01 # Error variance
Y <- Reduce(function(y, e) y * phi + e, rnorm(n, cnst, sigma), 0, accumulate=TRUE)
n0 <- which.max(abs(Y) >= quantile(abs(Y), 0.5)) # Estimate where Y levels off
Y <- Y[-seq_len(n0)] # Strip the initial values
plot(Y) # LOOK at Y before doing anything else...