Estoy intentando encajar un conjunto de datos de media hora de duración de un año en SARIMAX de Python statsmodels. He trazado el correlograma e indica términos AR y MA muy por encima de 5 cada uno, y términos periódicos (diarios) de alrededor de 2. Pero incluso yendo más allá del orden 2 en los términos AR o MA, ya sean estacionales o no estacionales. Pero incluso yendo más allá del orden 2 en los términos AR o MA de tipo estacional o no estacional da un error de convergencia MLE.
C:\Users\<user>\AppData\Local\Continuum\miniconda3\lib\site-packages\statsmodels\base\
model.py:496: ConvergenceWarning: Maximum Likelihood optimization failed to converge.
Check mle_retvals
"Check mle_retvals", ConvergenceWarning)
Entiendo que es un modelo no lineal y que no converge, pero no sé cómo proceder. . Se tarda más de una hora en ajustar todo el conjunto de datos, por lo que me veo obligado a utilizar sólo uno o dos meses de datos cuando itero. Sospecho intuitivamente que esto reduce el orden potencial de los términos que pueden ser acomodados por el ajuste SARIMAX sin problemas de convergencia, aunque no tengo una comprensión profunda de los conceptos aquí.mle_retvals
no es una propiedad del SARIMAXResults
objeto
Otros detalles posiblemente importantes son que faltan muchos valores en todo el conjunto de datos, y estoy confiando en el formulario de espacio de estados para imputar estos valores que faltan.
¿Cómo puedo solucionar los errores de convergencia que obtengo con SARIMAX? ¿Qué aspectos debo comprobar que podrían estar causando los problemas? ¿Suelen solucionarse estos problemas? Gracias.
Actualización: No sé qué ha pasado ahora, pero estoy recibiendo un objeto mle_retvals
{'Hinv': array([[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1]]),
'converged': False,
'fcalls': 44,
'fopt': 0.22864169058350794,
'gcalls': 33,
'gopt': array([ 0.33676031, -0.35390488, -0.01763243, -0.09141768, -0.12037386,
0.08537955]),
'warnflag': 2}
Esto fue para order=(2,0,2) y seasonal_order=(1,0,0,48). Y ahora también me doy cuenta de que había una advertencia antes de la ConvergenceWarning
Warning: Desired error not necessarily achieved due to precision loss.
Así que el hessiano es singular; ¿no parece un problema de datos? probablemente esto significa que los datos son de orden inferior al modelo? Pero eso no se refleja en la ACF y PACF de la serie residual interpolada del modelo (1,0,2),(1,0,0,48), donde hay muchos picos por encima del nivel de significación (véase PACF más abajo). Para ello he utilizado el algoritmo BFGS.
Interpolar los datos para eliminar los valores que faltan no cambia nada.
Cambio de algoritmo : Nelder-Mead parecía requerir muchas iteraciones, pero finalmente converge para (2,0,2),(1,0,0,48), ver PACF abajo