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)
Change History (2)
Changed 14 years ago by
Attachment: | estDiag_Aut.oza added |
---|
comment:1 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | new → closed |
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.
Modelo ticket 1240