Tengo una serie de zoológicos con muchos valores perdidos. ¿Leí que auto.arima
puede imputar estos valores faltantes? ¿Alguien puede enseñarme cómo hacerlo? ¡muchas gracias!
Esto es lo que he intentado, pero sin éxito:
fit <- auto.arima(tsx)
plot(forecast(fit))
Respuestas:
Primero, tenga en cuenta que
forecast
calcula las predicciones fuera de la muestra, pero le interesan las observaciones dentro de la muestra.El filtro de Kalman maneja los valores faltantes. Por lo tanto, puede tomar la forma de espacio de estado del modelo ARIMA a partir de la salida devuelta por
forecast::auto.arima
ostats::arima
y pasarla aKalmanRun
.Editar (corregir en el código según la respuesta de stats0007)
Utilizo un
ts
objeto como una serie de muestra en lugar dezoo
, pero debería ser lo mismo:Puede trazar el resultado (para toda la serie y para todo el año con observaciones faltantes en el medio de la muestra):
Puede repetir el mismo ejemplo utilizando el suavizador de Kalman en lugar del filtro de Kalman. Todo lo que necesitas cambiar son estas líneas:
Tratar las observaciones faltantes por medio del filtro de Kalman a veces se interpreta como extrapolación de la serie; Cuando se utiliza el Kalman Smooth, se dice que las observaciones faltantes se completan por interpolación en la serie observada.
fuente
makeARIMA
id
makeARIMA
Z <- c(1, rep.int(0, r - 1L), Delta)
Delta
length(tmp)==1
id
Z
Aquí sería mi solución:
@ Javlacalle:
Gracias por tu publicación, muy interesante!
Tengo dos preguntas para su solución, espero que me puedan ayudar:
¿Por qué usas KalmanRun en lugar de KalmanSmooth? Leí que KalmanRun se considera extrapolación, mientras que suave sería una estimación.
Tampoco entiendo tu identificación. ¿Por qué no usas todos los componentes en .Z? Quiero decir, por ejemplo .Z da 1, 0,0,0,0,1, -1 -> 7 valores. Esto significaría que .smooth (en su caso para los estados de KalmanRun) me da 7 columnas. Según tengo entendido, todas las columnas que son 1 o -1 entran en el modelo.
Digamos que falta la fila número 5 en AirPass. Luego tomaría la suma de la fila 5 de esta manera: agregaría valor de la columna 1 (porque Z dio 1), no agregaría la columna 2-4 (porque Z dice 0), agregaría la columna 5 y agregue el valor negativo de la columna 7 (porque Z dice -1)
¿Está mal mi solución? ¿O ambos están bien? ¿Me podrías explicar más?
fuente