#495 closed doubt (fixed)
Dudas con la transformación Boxcox
Reported by: | lmperez | Owned by: | |
---|---|---|---|
Priority: | critical | Milestone: | Maintenance |
Component: | Models | Keywords: | BoxCox |
Cc: |
Description (last modified by )
Hola MMS, cuando defino un submodelo y escribo la orden
MMS::@Transformation _.transformation = MMS::@Transformation.BoxCox::Default(0,1)
entiendo que la serie output transformada debería ser zt=Log(st+1), sin embargo MMS hace zt=Log(st)
Por otra parte cuando quiero definir transformación identidad:
MMS::@Transformation _.transformation = MMS::@Transformation.BoxCox::Default(1,0)
entiendo que debería hacer zt=st, sin embargo MMS hace zt=st-1
Podéis compilar el projecto de matriculación de vehículos probando las dos transformaciones y ejecutar las ordenes:
Serie original = MMS::Container::GetModel("Mat.Veh__1.0")::GetSubmodel("Veh.Tur.Mat")::GetOutput(?)::GetVariable(?)::GetData(?); Serie transformada = MMS::Container::GetModel("Mat.Veh__1.0")::GetSubmodel("Veh.Tur.Mat")::GetOutput(?)::GetData(?); Serie TransLog = BoxCoxTransf(original,@BoxCoxStruct(0,1)); Serie TransId = BoxCoxTransf(original,@BoxCoxStruct(1,0));
Change History (2)
comment:1 Changed 14 years ago by
Component: | Estimation → Models |
---|---|
Description: | modified (diff) |
Milestone: | → Maintenance |
Resolution: | → fixed |
Status: | new → closed |
Summary: | Problema con la transformacion Boxcox → Dudas con la transformación Boxcox |
Type: | defect → doubt |
comment:2 Changed 14 years ago by
Bien, no se quien me ha contestado. Primero decir que he vuelto a revisar mi código y he visto dos cosas.
Primera: que efectivamente mms hace las transformaciones que tu dices.
Segunda: que en un sitio de mi proyecto usaba las transformaciones boxcox de tol (no de mms), y estas son diferentes:
Os paso el código de las transformaciones de tol, están definidas en C:\Program Files\Bayes\tolbase-v2.0.1\bin\stdlib\general\grammars/_serie.tol
////////////////////////////////////////////////////////////////////////////// Serie BoxCoxTransform(Serie s, Real bct) ////////////////////////////////////////////////////////////////////////////// { If(bct==1, s+0, If(bct==0, Log(s), s^bct)) }; ////////////////////////////////////////////////////////////////////////////// Serie BoxCoxInverseTransform(Serie s, Real bct) ////////////////////////////////////////////////////////////////////////////// { Real invExp = 1/bct; If(bct==1, s+0, If(bct==0, Exp(s), s^invExp)) };
Se que seguramente estaréis agobiados a más no poder, pero este tipo de cosas son muy peligrosas. A mi por lo menos me estaban metiendo un sesgo en las previsiones bastante grande.
Aprovecho para comentar, aunque quizá no sea éste el sitio apropiado, y no se de quien es responsabilidad esto, pero entiendo que el código que usemos en las empresa debería tener al menos un mínimo de compatibilidad hacia atrás o hacia delante. Pero no puede ser que si llamo a una funcion de mms me haga una cosa distinta a una función de tol que supuestamente debería hacer lo mismo.
Gracias
No hay ningún problema con las transformación BoxCox, simplemente tenemos "viciada" la definición de esta transformación. En MMS hemos intentado ser coherentes con la nomenclatura más habitual en la literatura, donde la definición de la transformación es continua en el parámetro de potencia (lambda). Véase Transformación BoxCox.
La definición que usa MMS es la siguiente:
Así: