Pregunta

data <-c(88, 84, 85, 85, 84, 85, 83, 85, 88, 89, 91, 99, 104, 112, 126, 138, 146,151,   150, 148, 147, 149, 143, 132, 131, 139, 147, 150, 148, 145, 140, 134, 131, 131, 129, 126, 126, 132, 137, 140, 142, 150, 159, 167, 170, 171, 172, 172, 174, 175, 172, 172, 174, 174, 169, 165, 156, 142, 131, 121, 112, 104, 102, 99, 99, 95, 88, 84, 84, 87, 89, 88, 85, 86, 89, 91, 91, 94, 101, 110, 121, 135, 145, 149, 156, 165, 171, 175, 177, 182, 193, 204, 208, 210, 215, 222, 228, 226, 222, 220)

¿Por qué los modelos ARMA que actúan en las primeras diferencias de los datos difieren de los modelos ARIMA correspondientes?

for (p in 0:5)
{
for (q in 0:5)
{
#data.arma = arima(diff(data), order = c(p, 0, q));cat("p =", p, ", q =", q, "AIC =",  data.arma$aic, "\n");
data.arma = arima(data, order = c(p, 1, q));cat("p =", p, ", q =", q, "AIC =", data.arma$aic, "\n");
}
}

Lo mismo con Arima(data,c(5,1,4)) y Arima(diff(data),c(5,0,4)) en el paquete de previsión. Puedo conseguir la consistencia deseada con

auto.arima(diff(data),max.p=5,max.q=5,d=0,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);
auto.arima(data,max.p=5,max.q=5,d=1,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);

pero parece que el titular de la estimación mínima AIC para estos datos no han sido consideradas por el algoritmo detrás auto.arima; por lo tanto, la elección subóptima de ARMA (3,0) en lugar de ARMA (5,4) que actúa sobre las primeras diferencias. Una cuestión relacionada es la cantidad de las dos estimaciones AIC deben diferir antes se tiene en cuenta un modelo mejor que el otro tiene poco que ver programación Wuth - el soporte de la AIC más pequeño debería al menos ser considerado / informado, a pesar de que 9 coeficientes pueden ser un poco demasiado para obtener la previsión de 100 observaciones.

Mis R preguntas son:

1) versión vectorizada de la doble bucle por lo que es más rápido?

2) ¿Por qué arima(5,1,4) actuar sobre los datos difieren de arma(5,4) que actúa sobre las primeras diferencias de los datos? ¿Cuál debe ser informado?

3) ¿Cómo puedo ordenar la salida AIC por lo que cuanto más pequeño es primero?

Gracias.

¿Fue útil?

Solución

Hay un montón de preguntas y cuestiones planteadas aquí. Voy a tratar de responder a cada uno de ellos.

Arima() es sólo un envoltorio para arima(), lo que le dará el mismo modelo.

Arima () se encarga de un modelo con diferenciación mediante el uso de un difuso anterior. Ese no es el mismo que acaba de diferenciación de los datos antes de ajustar el modelo. En consecuencia, obtendrá resultados ligeramente diferentes de arima(x,order=c(p,1,q)) y arima(diff(x),order=c(p,0,q)).

auto.arima() maneja diferenciación directamente y no utilizar un difuso previa cuando apropiado. Por lo que obtendrá los mismos resultados de auto.arima(x,d=1,...) y auto.arima(diff(x),d=0,...)

auto.arima() tiene un max.order argumento que especifica el máximo de p + q. Por defecto, max.order=5, por lo que no sería considerado su arima(5,1,4). Aumentar max.order si se quiere tener en cuenta este tipo de modelos de gran tamaño (aunque yo no lo recomendaría).

No se puede vectorizar un bucle que implica la optimización no lineal en cada iteración.

Si desea ordenar la salida, tendrá que guardarlo en un hoja.de.datos y luego ordene la columna correspondiente. El código actualmente solo escupe los resultados a medida que se va y no se guarda nada, excepto para el modelo más reciente instalado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top