close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 14 years ago

Closed 14 years ago

#1240 closed doubt (fixed)

Diferencias en los parámetros estimados debidas a los parámetros iniciales

Reported by: imendez Owned by: Víctor de Buen Remiro
Priority: normal Milestone: Mantainance
Component: Math Version: 2.0.1
Severity: normal Keywords:
Cc:

Description

Hola, tengo un modelo ARIMAX relativamente sencillo (9 inputs, 73 datos) que he estimado dos veces, con diferentes valores iniciales para los 9 inputs (0.1 y 0.9, respectivamente). Los valores iniciales de los dos parámetros ARIMA (AR 1 y MA 12) no varían.

Me sorprende que los parámetros estimados sean tan diferentes, especialmente los de la parte ARIMA:

  • El AR(1) pasa de 0.88 a 0.92
  • El MA(12) pasa de 0.39 a 0.29

Estas diferencias hacen que las previsiones sean muy diferentes, que es mi verdadero problema.
El modelo ha sido estimado con Estimate, como veis en el siguiente código:

Set sDiagEst = Ois.Load("C:/estDiag_Aut.oza");
Set modBad = sDiagEst[1][1][2];
Set mod = [[ modBad[1], modBad[3], modBad[4], modBad[5], modBad[6],
             modBad[7], modBad[8], modBad[9], modBad[13], modBad[14] ]];
Set modDef = PutStructure("ModelDef", mod);
Set est = Estimate(modDef, sDiagEst[1][1][3], sDiagEst[1][1][4]);

Set sInpCP_0.9 = EvalSet(modDef[9], Set(Set c) { InputDef(0.9, c->X) });
Set modBad_0.9 = modDef;
Set modBad_0.9[9] := sInpCP_0.9;
Set modDef_0.9 = PutStructure("ModelDef", modBad_0.9);
Set est_0.9 = Estimate(modDef_0.9, sDiagEst[1][1][3], sDiagEst[1][1][4]);

Supongo que se debe a que algún parámetro de configuración de Estimate no es adecuado para la escala de los datos. Os paso los valores que tengo para algunos de los parámetros que creo que tienen relación:

Tolerance = 1e-005
RelativeTolerance = 1e-005
MaxIter = 40
MarqLinMet = 1
Givens = 2
Choleski = 3
MarqFactor = 3
DiffDist = 1e-006
CGMaxIter = 3

¿Está el problema en esos parámetros de configuración?
En caso afirmativo, ¿sería posible que TOL incluyese algún algoritmo para hacer una pre-evaluación de los parámetros de Estimate que proporcionara una recomendación al usuario?

Gracias, un saludo.

Nota: no sé a qué componente asignar el ticket.

Attachments (1)

estDiag_Aut.oza (11.2 KB) - added by imendez 14 years ago.
Modelo ticket 1240

Download all attachments as: .zip

Change History (2)

Changed 14 years ago by imendez

Attachment: estDiag_Aut.oza added

Modelo ticket 1240

comment:1 Changed 14 years ago by Víctor de Buen Remiro

Resolution: fixed
Status: newclosed

Cuando ocurre este tipo de cosas normalmente es porque da lo mismo unos valores que otros, es decir, que la verosimilitud es muy plana en una amplia región. Vemos que efectivamente la verosimilitud, o mejor dicho la aproximación de su inversa que se maximiza en Estimate, es muy similar en ambas estimaciones

Real target_0.1 = est::Information::normMaxLH;      // 0.001153824777693088
Real target_0.9 = est_0.9::Information::normMaxLH;  // 0.001135633710191476

La diferencia entre ambas es de 1.8 veces la tolerancia absoluta que tienes establecida en 1E-5, y que en un modelo en el que la sigma está en torno a 1E-3 debería ser bastante menor. Probablemente se está abortando el proceso demasiado pronto así que he probado con Tolerance := 1E-8 y ahora convergen ambos a puntos muy parecidos:

Name Factor Order Value 0.1 Value 0.9 dif StDs TStudent
Pulso_y2008m10d01.Men 1 0 -0.000502181270806 -0.000501557983303 -6.23287502999974E-07 0.000369986143336 -0.00168462390883093
Pulso_y2008m08d01.Men 1 0 0.00119969062401 0.00119968738726 3.23674999996859E-09 0.000398604617232 8.12020197469189E-06
Step_y2009m01d01.Men 1 0 -0.000407219921164 -0.000408104610327 8.84689162999983E-07 0.000691241035182 0.00127985625559259
Pulso_y2007m04d01.Men 1 0 -0.000739729774172 -0.000736559717393 -3.17005677900005E-06 0.000382476500735 -0.00828823933734019
Step_y2008m01d01.Men 1 0 0.0703616226028 0.0703611477898 4.74813000000962E-07 0.000704545838431 0.000673927761830734
Pulso_y2009m08d01.Men 1 0 0.000706422295449 0.000707125925112 -7.03629663000027E-07 0.000397901561668 -0.00176835109681505
Pulso_y2010m12d01.Men 1 0 0.0054137324393 0.00540886293168 4.86950762000008E-06 0.00112578718482 0.00432542463234617
RegularAR 1 1 0.929528718161 0.929333139681 0.000195578480000069 0.0456551305376 0.00428382259993754
Estacional (1)MA 2 12 0.261436643004 0.26151153361 -7.48906060000221E-05 0.171050449766 -0.00043782758889248

La norma es ahora casi idéntica en ambos casos

Real target_0.1 = est::Information::normMaxLH;      // 0.00113431575350735
Real target_0.9 = est_0.9::Information::normMaxLH;  // 0.001134316183011702

El motivo por el que cambiaban tanto los parámetros ARMA es que una combinación suya pertenece al cuasi-kernel del jacobiano. Si miramos los autovalores

Matrix eigenValues = SubDiag(est::Correlations::D,0);
/*
3.64435839471   3.0514436276    2.97344619939   2.35674516007   2.05806999452
1.37666424957   1.02290367896   0.0257706325469 0.0064418844022
*/

vemos que el cocoente entre el menor y el mayor es de 1.7E-3

Real eigenRatio = MatMin(eigenValues) / MatMax(eigenValues); //->0.001767631968238475

Por lo tanto el autovector correspondiente al último autovalor está aportando muy poco al modelo en términos explicativos

Matrix lastEigenVector = SubCol(est::Correlations::V,[[9]]);

Si tabulamos ese vector junto a los nombres de las variables vemos q2ue está dominado por las dos últimas, que son las ARMA

Name V(9)
Pulso_y2008m10d01.Men 0.000178262352689
Pulso_y2008m08d01.Men 0.000182579979312
Step_y2009m01d01.Men 0.000402850193384
Pulso_y2007m04d01.Men 0.000707127048525
Step_y2008m01d01.Men 0.00107118856764
Pulso_y2009m08d01.Men 0.000131493117017
Pulso_y2010m12d01.Men 0.00180902492375
RegularAR -0.0933717449397
Estacional (1)MA -0.995628722221

Por otra parte no es nada extraño que pasen estas cosas con tan pocos datos, pues con la doble diferencia, los 73 datos se te quedan en 60 para 9 variables, es decir, la superficie de contraste no llega a 7 que es bastante poco. Sobran variables o tienes que ir a un ataque bayesiano donde introducir información a priori de algún tipo, si es que la tienes.

Note: See TracTickets for help on using tickets.