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

#1055 closed defect (fixed)

La transformación BoxCox es diferente en Tol y MMS

Reported by: lmperez@… Owned by: Víctor de Buen Remiro
Priority: highest Milestone:
Component: ASCII data files Version:
Severity: blocker Keywords:
Cc:

Description

Las funciones BoxCoxTransform y BoxCoxInverseTransform "C:\Program Files\Bayes\tolbase-v2.0.1\bin\stdlib\general\grammars\_.serie.tol" son distintas a las análogas en mms "\PRE-1.0\MMS\definition\02_model\def_transformation.tol" y "\PRE-1.0\MMS\definition\02_model\def_transformation_boxcox.tol". He subido el ticket en ambos sitios

no se cual debería tomar la responsabilidad de cambiar y de avisar a todos los projectos de Bayes que puedan estar usándolas.

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))
};

MMS

//////////////////////////////////////////////////////////////////////////////
@MMS.Transformation BoxCox(Real first, Real second) 
//////////////////////////////////////////////////////////////////////////////
{
  @MMS.Transformation::Block(NameBlock { NameBlock args = [[
    Text _.name              = "BoxCox_"<<first<<"_"<<second;
    Text _.grammar           = "Serie";
    Text _.contextExpression = "
      Real _.first = "<<first<<";
      Real _.second = "<<second<<";
    ";
    Text _.directExpression  = If(first==0, 
      "Serie (Serie s) { Log(s + _.second) }",
      "Serie (Serie s) { ((s + _.second)**_.first - 1)/_.first }"
    );
    Text _.inverseExpression = If(first==0, 
      "Serie (Serie t) { Exp(t) - _.second }",
      "Serie (Serie t) { (_.first * t + 1)**(1/_.first) - _.second }"
    )
  ]] })
};

Change History (3)

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

¿Qué problema hay en que haya dos funciones distintas que hagan cosas distintas que satisfacen necesidades distintas?

comment:2 Changed 14 years ago by lmperez@…

Pues que puede llevar a confusión, a mi por lo menos me ha llevado y no soy nuevo en Bayes.

Antes comenté el caso de la "BoxCoxTransform", pero hay otra que es incluso peor "BoxCoxTransf". Si tenemos dos funciones, "BoxCoxTransf(Serie St, @BoxCoxStruct(first,second))" de tol que recibe el set con la pareja exponente-traslación, y la en teoría homóloga en MMS "@MMS.Transformation BoxCox(Real first, Real second)" que recibe también el set exponente-traslación. A mi por lo menos el sentido común me dice que deberían hacer lo mismo y sin embargo no es así.
He estado el sábado entero y el domingo buscando la causa que me originaba un sesgo en las previsiones de unos cuantos miles de outputs que tengo en transformación identidad. He revisado de cabo a rabo todo el proceso y no encontraba ningún error hasta que me dí cuenta que el fallo estaba en cómo se hacía la boxcox, que no era como yo pensaba.
La verdad es que esperaba que alguien me contestara de otra forma, pero lo que me dices no hace sino preocuparme más aún, ¿tengo entonces que revisarme todas las funciones de mms y tol que conozco a ver si hacen lo mismo?

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

Resolution: fixed
Status: newclosed

La transformación que se usa en MMS es un tipo de transformación que busca la continuidad en los parámetros que es algo que no es preciso en absoluto para el análisis de series temporales. En MMS deben implementar, con otro nombre para evitar problemas de compatibilidad, la transformación usada históricamente en TOL.

Note: See TracTickets for help on using tickets.