{{{ #!html
Una breve biblia de la función Estimate
por Víctor de Buen: vdebuen@bayesinf.com
Estima el modelo ARIMA con función de transferencia
(D(B)*P(B)):(Zt - Sum(Wk(B) Xtk)) = Q(B):At
Se trata de un modelo de regresión no lineal y como tal presenta dificultades de estimación importantes además de las que presenta el modelo de regresión lineal. Se asume que el usuario tiene conocimientos medios de estadística y conoce los rudimentos para formular un modelo estadístico sensato, con un número de variables adecuado al tamaño muestral, con variables de filtro significativas y de rango completo, y una estructura estacional ARIMA congruente con el autocorrelograma.
Esta función hace una estimación máximo verosímil con un método iterativo de aproximación progresiva, pero basándose en una transformación de los residuos tal que la minimización de su suma de cadrados coincida exáctamente con el máximo de la función de verosimilitud. Es decir, puede que no alcanze el punto de máxima verosimilitud pero la verosimilitud del mejor punto alcanzado es realmente la que dice que es.
El comportamiento de Estimate depende efectivamente de un conjunto de parámetros globales, lo cual fue quizás un error de diseño en su momento, ya que deberían al menos estar organizados de una forma más razonable, aunque hay que entender que por una parte algunas de estas variablas afectan también a otros algoritmos por lo que es necesario que sean globales, y, por otro lado, pasarlas como argumentos opcionales en cada llamada podría ser bastante incómodo.
Los valores por defecto que se dan en el SADD son los que funcionaron en su día en los proyectos que se estuvieran haciendo pero en cada nuevo proyectyo se deberían ajustar al tamaño y la forma de las series analizadas. En casos extremos, incluso puede que se haga necesario ajustarlos para cada una de ellas.
Todos los afectan a Estimate son los que se recogen en el archivo source/system/definition.tol del SADD y que se describen a continuación.
Tipo |
Nombre |
Descripción |
Real |
Tolerance |
Tolerancia para métodos numéricos iterativos de optimización y resolución de ecuaciones. Cuando la diferencia entre dos valores consecutivos de la función objetivo es menor en valor absoluto que dicha cota la iteración se para para evitar un exeso de consumo de CPU cuando el beneficio obtenido ya no lo compensa. Casi todos los métodos tienen convergencia casi cuadrática pero cuando crece el número de variables y correlaciones aplanado excesivamente la función cerca del óptimo, entonces la convergencia se hace lineal dando lugar a un proceso demasiado largo para la ventaja obtenida en cada iteración. Lo normal es poner un valor 10 ó 100 veces menor que la unidad que se considere como poco relevante. |
Real |
RelativeTolerance |
Tolerancia relativa para métodos numéricos iterativos. El objetivo es el mismo que el de la variable Real Tolerance sólo que aquí la métrica es la relativa, es decir, la diferencia en tanto por uno con respecto al valor de la función objetivo de la iteración anterior. A veces es más eficiente esta métrica cuando se quieren controlar diferentes funciones objetivo con la misma parametrización. En tal caso se fija la tolererancia mínima de todas ellas con Tolerance y se aplica el valor deseado de RelativeTolerance para que no haga más iteraciones en los procesos de función objetivo de mayor volumen. |
Real |
MaxIter |
Máximo de iteraciones para métodos numéricos iterativos. Sirve para evitar caer en ciclos demasiado largos e incluso infinitos en casos de error en la definición de la función objetivo o de algún proceso de cálculo. En procesos masivos en los que se pretenda ahorrar en el tiempo total de estimación sólo cabe el método heurístico de bajar este número máximo de iteraciones y comprobar como repercute en la calidad de los resultados. |
Real |
CGMaxIter |
Máximo de iteraciones para el método del gradiente conjugado utilizado en la función Estimate cuando los métodos diferenciales como Marquardt y el descenso curvilíneo fracasan. Este método consume más recursos cuando hay muchas variables pero es el más robusto de todos cuando hay mucha correlación entre variables y puede sacar al estimador de situaciones complicadas. |
Real |
DiffDist |
Distancia de puntos para aproximaciones diferenciales numericas. Cuando se utiliza diferenciación numérica ordinaria o parcial, como es el caso del jacobiano numérico, es necesario definir cuál es el tamaño de paso para la aproximación del límite cuando dicho paso tiende a cero, que corresponde a la definición analítica de derivada. Es decir, se trata del valor que se le suma a cada variable independiente componente del vector de parámetros del problema para explorar la diferncia resultante en la función objetivo. Internamente se intenta normalizar pero esto no resulta trivial y es muy recomendable que los valores de todas las componentes sean de un orden de magnitud similar. Si esto no ocurre el proceso será más sensible a unas variables que a otras e irá “renqueando” más lentamente hacia la solución o incluso puede llegar a desviarse tanto que no la encuentre. Para ello es conveniente que los inputs del problema están en unidades similares. |
Real |
MarqFactor |
Parámetro de factor lambda en el método de minimización cuadrática de Marquardt. Afecta más a la eficiencia de la estimación que a los resultados obtenidos y en general no es conveniente tocar este parámetro si no se conoce profundamente el método de Marquardt. |
Real |
DoDiagnostics |
Deshabilitado de momento. La función Estimate de modelos ARIMA realizará los diagnósticos de los modelos si esta variable es TRUE. Dichos diagnósticos son en gran medida bastante heurísticos y habría que hacer un esfuerzo para actualizarlos. Quda pendiente una explicación detallada de lo que hay y lo que debería haber. |
Real |
DoStatistics |
La función Estimate de modelos ARIMA realizará las estadísticas de los modelos si esta variable es TRUE. |
Real |
NullInitResiduals |
La función Estimate de modelos ARIMA tomará residuos iniciales nulos si esta variable es TRUE. Esta opción se dio para evitar el cálculo de los valres iniciales de la ecuación en diferencias del modelo ARMA, que en algunas versiones anteriores de TOL podían ser excesivamente costosas. No se debe utilizar esta opción salvo en casos extremos de series muy largas con inicios muy suaves y aún así no tiene demasiado sentido pues el coste computacional no es relevante actualmente. |
Real |
MinOutlierLikelyhood |
El mínimo valor admisible para la razon de verosimilitud de 'outliers'(t-Student). Es la significación mínima que ha de dar la estimación parcial de una anomalía en una serie con un modelo preestimado. Esta variable no afecta a Estimate sino a la función AIA que se utiliza a menudo tras un paso inicial de estimación para eliminar las anomalías en segundo paso. |
Real |
MarqLinMet |
Método lineal usado en cada iteración del método de Marquardt(Householder o Givens) En realidad esta variable está obsoleta pues se usa siempre una variante del método de Lanczos que ha demostrado ser el más robusto y eficiente de todos los métodos de resolución de sistemas lineales. |
Los argumentos de entrada obligatorios se introducen en un conjunto con estructura ModelDef con los campos que se enumeran en la siguiente tabla. Opcionalmente se pueden especificar fechas de comienzo y fin de la estimación distintas de las de la serie output. Si se pasan fechas externas a la serie, se le añadirán los omitidos necesarios los cuales se tratarán internamente como el resto de interrupciones. Existen otros parámetros opcionales pero son a título experimental y nunca dieron buenos resultados así que no se detallan.
Tipo |
Nombre |
Descripción |
Serie |
Output |
La serie para la que se pretende estimar el modelo en términos originales. |
Real |
FstTransfor |
Término lineal en la transformación de Box-Cox a sumar a la serie output (Output-FstTransfor)^SndTransfor |
Real |
SndTransfor |
Término exponencial en la transformación de Box-Cox a sumar a la serie output (Output-FstTransfor)^SndTransfor. Cuando SndTransfor es cero se entiende Log(Output-FstTransfor) |
Real |
Period |
Máxima periodicidad de la parte ARMA |
Real |
Constant |
Constante del modelo. No se usa. Pásese 0 ó ?. Si se quiere que el modelo tenga constante métase un input constante. |
Real |
Dif |
Polinomio de diferencias del modelo. En realidad se puede pasar cualquier estructura polinomial determinista. |
Real |
AR |
Conjunto de factores autoregresivos para las distintas estacionalidades o periodicidades. Cuando una periodicidad no tiene parte AR se especificará el polinomio 1. Nunca se debe dejar vacía o saltarse porque entonces se pierde el paralelismo con la parte MA. |
Real |
MA |
Conjunto de factores de media móvil para las distintas estacionalidades o periodicidades. Cuando una periodicidad no tiene parte MA se especificará el polinomio 1. Nunca se debe dejar vacía o saltarse porque entonces se pierde el paralelismo con la parte AR. |
Real |
Input |
Conjunto de inputs y sus funciones de transferencia lineales en elementos con estructura InputDef. La matriz de diseño resultante tras diferenciar las series inputos y aplicarles cada uno de los omegas con su grado correspondiente, debe ser de rango completo, y es aconsejable que esté numéricamente bien condicionada, es decir, que no hayan tampoco autovalores próximos a cero; para poder aplicar adecuadamente las hipótesis usuales de regresión. En caso contrario los resultados estadísticos serán poco fiables a nivel inferencial y además el proceso de estimación se verá perturbado numéricamente produciendo como mínimo una ralentización de la convergencia de los métodos iterativos tanto mayor cuanto mayor sea la dimensión del núcleo (kernel). |
Real |
NonLinInput |
Funciones de transferencia no lineales. No se usa. Se puede pasar el conjunto vacío a partir de la versión 1.1.5, antes se tenía que pasar AllLinear o algo similar. |
Los resultados de la función Estimate se devuelven en un conjunto ramificado de conjuntos clasificados por áreas
Área |
Elemento |
Descripción |
Information |
|
Información básica acerca de las dimensiones y los principales estadísticos del modelo. |
|
FirstDate |
Fecha de inicio de la estimación |
|
LastDate |
Fecha de fin de la estimación |
|
DataNumber |
Longitud de la serie diferenciada |
|
VarNumber |
Número de variables |
|
Average |
Media de los residuos. Debe ser cercana a cero. |
|
RSS |
Suma de cuadrados de los residuos |
|
Variance |
Varianza de los residuos |
|
Sigma |
Desviación típica de los residuos |
|
Asymmetry |
Coeficiente de asimetría de los residuos. Debe ser cercano a cero |
|
Kurtosis |
Coeficiente de kurtosis de los residuos |
|
Pearson |
Coeficiente de Pearson. Correlación entre la serie output y la de previsión. |
|
R2 |
Coeficiente R2. Es el cuadrado del coeficiente de Pearson. |
|
Swartz |
Criterio de información de Swartz. |
|
Qualification |
Deshabilitado |
|
Arith-Qualif |
Deshabilitado |
|
MaxLHSigma |
Estimación máximo verosímil de la desviación típica de los residuos. |
|
normMaxLH |
Norma modificada de los residuos cuyo mínimo coincide con la máxima verosimilitud. |
Definition |
|
Definición del modelo resultante en una estructura ModelDef similar a la usada para la estimación pero con los valores resultantes de la misma. |
Series |
|
Series involucradas en los cálculos del modelo |
|
Residuals |
Serie de residuos del modelo. Deben ser independientes y normales de media nula y varianza constante. Debe presentar por tanto un autocorrelograma casi plano. |
|
DifNoise |
Serie de ruido diferenciado, ruido ARMA o ruido estacionario. Debe presentar un autocorrelograma convergente a cero más o menos rápidamente. |
|
Noise |
Serie de ruido sin diferenciar o ruido ARIMA no necesariamente estacionario. Si hay diferencias debe presentar un autocorrelograma divergente o de convergencia extremadamente lenta. |
|
Interruptions |
Serie de interrupciones estimadas. Tiene un valor estimado para cada fecha en la que la serie output transformada es desconocida. |
|
FullTransformed |
La serie output transformada rellenada con las interrupciones estimadas donde fuera desconocida. |
|
Transformed |
La serie output transformada tal como se le pasó al modelo |
|
PrevHistTrans |
La serie de previsión histórica una fecha por delante es la suma del filtro de transferencia y el ruido ARIMA |
|
Filter |
La serie de filtro es la suma de los efectos de todas las series inputs apllicándoles las funciones de transferencia estimadas por el modelo, es decir, la suma de los efectos exógenos o elementos causales externos, en contraposición a los a los efectos inerciales o efectos endógenos incorporados en la parte ARIMA del modelo. |
|
Effects |
Cada una de las series inputs una vez aplicada la correspondiente función de transferencia estimada. Todas ellas juntas suman el filtro |
Parameters |
|
Resumen de la información estadística sobre la estimación de los parámetros. Para cada uno se ofrece un registro con la estructura ParameterInf que contiene los siguientes campos |
|
Text Name |
Nombre identificador de la variable |
|
Real Factor |
Factor identificador de la componente de la función de transferencia. Actualmente sólo se usa en la parte ARMA para identificar el número de factor estacional |
|
Real Order |
Grado del polinomio al que afecta (AR, MA en la parte inercial, OMEGA en el filtro externo, pues DELTA no hay de momento). |
|
Real Value |
Valor estimado del parámetro |
|
Real StDs |
Desviación típica del parámetro. Este campo sólo aparece si DoStatistics es cierto. |
|
Real TStudent |
Estadístico t-student de la distribución marginal del parámetro para el contraste de la hipótesis de que no es nulo. Este campo sólo aparece si DoStatistics es cierto. |
|
Real RefuseProb |
Probabilidad de rechazo del parámetro por ser nulo. Este campo sólo aparece si DoStatistics es cierto. |
Correlations |
|
|
|
Jacobian |
Jacobiano de los residuos en el punto de máxima verosimilitud encontrado. En el mínimo debería ser J'*a = 0. |
|
U |
Matriz ortonormal de autovectores izquierdos (left-eigenvectors) en la descomposición de valor singular del Jacobiano |
|
D |
Matriz diagonal de autovaloes (eigenvalues) ordenados de mayor a menor en la descomposición de valor singular del Jacobiano. Deben ser todos estrictamente positivos y preferentemente lo más lejanos a cero que sea posible pues miden la significación de las componentes prioncipales del modelo. |
|
V |
Matriz ortonormal de autovectores derechos (left-eigenvectors) en la descomposición de valor singular del Jacobiano |
|
Kernel |
Deshabilitado |
|
Information Matrix |
Matriz de información de la regresión no lineal, es decir, MI = J'*J |
|
COV |
Matriz de covarianzas de los parámetros, COV = MI^(-1) * sigma^2 |
|
COR |
Matriz de correlaciones de los parámetros COR(i,j) = COV(i,j)/Sqrt(COV(i,i)*COV(j,j)) |
|
ACOR |
Autocorrelaciones muestrales de los residuos |
|
PACOR |
Autocorrelaciones parciales muestrales de los residuos |
Diagnostics |
|
Deshabilitado |
Como ya se ha dicho la hipótesis de rango completo es una condición irrenunciable de los modelos de regresión en los que se enmarca el modelo ARIMA con función de transferencia. Sin embargo la comprobación de que tal cosa es cierta es a menudo mucho más compleja que la estimación misma. El estimador detecta perfectamente los casos de colinealidad simple, es decir, las variables que son nulas y las que tienen correlación unitaria con otras, pero la colinealidad múltiple es mucho más compleja. En cualquier caso esta eliminación automática tiene sentido en procesos de estimación masiva en donde el analista no puede entrar a comprobar cada caso constantemente, pero debe tenerse como tarea primordial la revisión de las variables propuestas para no introducir variables absurdas y eliminarlas de forma razonable y de raíz.
En este apartado se explica mediante un ejemplo como detectar y evitar manualmente situaciones de colinealidad múltiple o correlación múltiple cercana a la unidad, lo cual es numéricamente casi igual de peligroso. Lo primero que hay que hacer es asegurarse de que la variable global DoStatistics no esté desactivada antes de llamar a Estimate, para que aplique el cálculo de la descomposición SVD del jacobiano y demás cálculos asociados a las covarianzas.
Una vez estimado el modelo hay que comprobar si los últimos autovalores son nulos o muy próximos a cero. Para ello se pueden extraer los autovalores con esta línea TOL
Matrix eigenvalues = Tra(SubDiag(ModeloEstimado["Correlations"]["D"],0));
En el caso expuesto, por ejemplo, había 4
autovalores nulos nulos y he extraído los 4 últimos
autovectores así
Matrix
SubCol(ModeloEstimado["Correlations"]["V"],[[n-3,n-2,n-1,n]])
De esa matriz se extraen los coeficientes que no sean nulos para ver qué parámetros del modelo intervienen en las colinealidades. Una posibilidad es copiar en una hoja de cálculo la tabla de parámetros anteponiendo los autovectores del núcleo y hacer la extracción:
EV[n-3] |
EV[n-2] |
EV[n-1] |
EV[n] |
Name |
Factor |
Order |
Value |
StDs |
TStudent |
RefuseProb |
0.04 |
0.03 |
0.57 |
0.03 |
input_1 |
1 |
0 |
0.1 |
0.02 |
3.93 |
0 |
-0.04 |
-0.03 |
-0.57 |
-0.03 |
input_1 |
1 |
7 |
-0.12 |
0.02 |
-5.69 |
0 |
-0.04 |
-0.03 |
-0.57 |
-0.03 |
input_2 |
1 |
14 |
-0.03 |
0.02 |
-1.5 |
0.13 |
-0.03 |
0.04 |
0.03 |
-0.57 |
input_3 |
1 |
0 |
0.53 |
0.02 |
24.75 |
0 |
0.03 |
-0.04 |
-0.03 |
0.57 |
input_4 |
1 |
0 |
-0.29 |
0.02 |
-12.14 |
0 |
-0.03 |
0.04 |
0.03 |
-0.57 |
input_4 |
1 |
7 |
0.15 |
0.03 |
4.51 |
0 |
0.03 |
0.57 |
-0.04 |
0.04 |
input_5 |
1 |
0 |
0.34 |
0.03 |
12 |
0 |
-0.03 |
-0.57 |
0.04 |
-0.04 |
input_6 |
1 |
0 |
0.06 |
0.02 |
3.29 |
0 |
0.03 |
0.57 |
-0.04 |
0.04 |
input_6 |
1 |
2 |
-0.11 |
0.02 |
-5.04 |
0 |
-0.57 |
0.03 |
0.04 |
0.03 |
input_7 |
1 |
0 |
-0.1 |
0.01 |
-7.94 |
0 |
0.57 |
-0.03 |
-0.04 |
-0.03 |
input_7 |
1 |
2 |
0.04 |
0.01 |
2.97 |
0 |
0.57 |
-0.03 |
-0.04 |
-0.03 |
input_8 |
1 |
0 |
0.29 |
0.02 |
12.82 |
0 |
Obsérvese que aunque las t-student son casi todas bastante significativas, la significación de 4 de las 12 variables es cero. El motivo es que el estadístico t-student expresa tan sólo la distribución marginal de cada parámetro. En este caso, a la vista de los autovectores, se sabe que existen cuatro relaciones lineales que afectan a 12 variables pero no está nada claro cual es la fora de resolver el problema: ¿qué variables sobran o están mal definidas por error? Lo que se hará es aplicar reducción gaussiana a las 4 columnas para simplificar las ecuaciones del kernel en busca de una base del mismo con una expresión con el mínimo de coeficientes no nulos. El resultado final es que existen estas 4 colinealidades irreducibles
Estas cuatro series, combinaciones lineales de inputs, son nulas en el intervalo de estimación, es decir forman el núcleo de la matriz de información J'J. La técnica es la misma empleada en análisis de componentes principales, sólo que en vez de buscar lo más significativo buscamos lo que no significa nada.
Se puede intentar automatizar este proceso de eliminación de variables colineales, pero no es trivial y es peligroso, aunque no menos que lo que se hace ahora con las correlaciones simples cmo ya se ha dicho antes. Lo que sí es prácticamente inmediato es poner un mensaje de error o al menos de warning cuando hayan autovalores cercanos a cero.
También se observa a menudo que hay docenas de componentes de significación irrisoria, especialmente cuando la superficie de contrate del modelo es demasiado pobre, es decir cuando el cociente entre el número de datos y el de variables es muy pequeño. Para que el modelo se pueda considerar como estadísticamente robusto muchos autores recomiendan superficies de contraste de 30 a 1 y en ningún caso bajar de 10 datos por variable.
La función Estimate busca el punto de máxima verosimilitud exacta de un modelo ARIMA con interrupciones y función de transferencia lineal (sin deltas). Se trata de un algoritmo bastante complejo pues la simple evaluación de la función objetivo contiene la resolución de una ecuación en diferencias de la que hay que estimar sus valores iniciales teniendo en cuenta la distribución conjunta de las dos series involucradas: los residuos y el ruido. Además, la construcción del filtro lineal puede tener un gran número de variables y el cálculo del jacobiano y su manipulación en los métodos numéricos iterativos de optimización lo complica aún más y es necesario contar con una serie de herramientas internas dificilmente explicables a quien no está introducido en el noble arte del cálculo numérico.
El método es en resumen una mezcla del algoritmo del Gradiente Conjugado (CG: Conjugate Gradient), el método de Búsqueda Curvilínea (CS: Curvilinear Search) y el de Levenberg-Martquardt (LM), que a su vez es mezcla del método de Gauss-Newton (GN) y el método de descenso más rápido (SD: Steepest Descent). Se trata pues de un complejo artefacto que no siempre es facil de manejar ni de interpretar y que en ningún caso es capaz de hacer magia: si se le pasa una función objetivo o unos inputs aberrantes da siempre valores aberrantes. Como a toda máquina se le debe tratar con cariño y condescendencia y hay que saber interpretar su comportamiento, razón por la cual se presentan estas notas.
En la red privada de Bayes ubicados en “N:\document\BAYES\CONCEPT\ARMA”, o en esta intranet navegando hasta “Document Manager / Tecnología / Modelación / Max Likelihood ARIMA Estimate”, se encuentran algunos documentos relacionados con el desarrollo teórico y la implementación de este método de estimación máximo-verosímil
EstConInt3.doc: Definición teórica y proposición de un método de cálculo de los valores iniciales y de las interrupciones
ArmaPolCov.doc: Cálculo de la matriz de autocovarianzas de un modelo ARMA
Un estimador de modelos ARIMA con FT.ppt: Presentación del método general de estimación máximo verosímil aplicado al caso ARIMA con función de transferencia.
InformeImplementaciónDeLaEstimacionARIMA_Mar2004.doc: Últimos ajustes desarrollados sobre la implementación de la función Estimate