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

Opened 9 years ago

Last modified 9 years ago

#1230 new enhancement

Nuevas funcionalidades en ExtLib

Reported by: Pedro Gea Owned by: Pedro Gea
Priority: major Milestone: Maintenance
Component: General Keywords:
Cc:

Description

Se solicita incorporar a ExtLib el conjunto de funciones usadas en el suavizado de series: interpolaciones, extensiones (forecast y backcast) y expansiones (cambios a fechado más fino).

Change History (9)

comment:1 Changed 9 years ago by Pedro Gea

(In [4804]) Refs #1230
Se suben las funciones de interpolación y de extensión de series.

comment:2 Changed 9 years ago by Pedro Gea

(In [4805]) Refs #1230
Se suben las funciones de expansión (cambio a fechado más fino).

comment:3 Changed 9 years ago by Pedro Gea

(In [4806]) Refs #1230
Correcciones y un ejemplo.

comment:4 Changed 9 years ago by Pedro Gea

(In [4808]) Refs #1230
Nuevas funciones y revisión de [4807].

comment:5 Changed 9 years ago by Pedro Gea

(In [4809]) Refs #1230
Correcciones.

comment:6 Changed 9 years ago by vdebuen

Hola

Sólo quiero hacer un comentario sobre eficiencia de ciclos TOL: siempre que se pueda es preferible usar directamente a una función implementada en C++ como función de evaluación de ciclo For o EvalSet porque elimina gran parte del overhead sintáctico. Por ejemplo, en source:trunk/ExtLib/fun_interpolate.tol hay bucles como éste

    Matrix x = SetRow(EvalSet(kDates, Real (Date dt) { 
      DateToIndex(dt) 
    }));

que serían más eficientes e incluso más legibles así:

    Matrix x = SetRow(EvalSet(kDates, DateToIndex);

NOTA: esto sirve para cualquier lenguaje interpretado como R, Python, etc.

comment:7 Changed 9 years ago by vdebuen

La función InterpolateSerie publicada por ExtLib no devuelve el intervalo completo por el final cuando se pasa a un fechado más fino. Por ejemplo si pasamos una serie Trimestral que acaba en y2015m10, a un fechado mensual debería retornar valores hasta y2015m12, y si se pasa a Diario hasta y2015m12d31.

En general sería hasta el

  Succ(Succ(Last(Y),Dating(Y),+1),TargetDating,-1)

comment:8 in reply to:  6 Changed 9 years ago by Pedro Gea

Replying to vdebuen:

Es cierto, gracias por la observación.

Sin embargo, como ocurre en las líneas siguientes, no siempre es posible hacer esto, de modo que se va olvidando.

...
    Matrix x = SetRow(EvalSet(kDates, Real (Date dt) { 
      DateToIndex(dt) 
    }));
    Matrix y = SetRow(EvalSet(kDates, Real (Date dt) { 
      SerDat(serie, dt)} 
    ));
...

comment:9 in reply to:  7 Changed 9 years ago by Pedro Gea

Replying to vdebuen:

Respecto a lo que debe devolver InterpolateSerie puede ser una cuestión conceptual.
En mi opinión, si interpola, no debe ampliar con datos hasta fin de intervalo como indicas, eso ya sería extrapolación.

Otra cosa sería una función que en lugar de hacer una interpolación, hiciera un cambio de fechado a un fechado más fino, sujeta a la condición que se mantengan los valores para las fechas del fechado más fino que pertenezcan al fechado original.

Para hacer estos cambios de fechado se diseñaron el conjunto de funciones denominadas de expansión: Expand*, concretamente la que hace esto es la que está vinculada con el estadístico FirstS: ExpandGSL_FirstS.

Serie s = SubSer(Gaussian(0, 1, Quarterly), y2015, y2015m10);
Serie InterpolateSerie(s, Monthly, "cspline");
Serie ExpandGSL_FirstS(s, Monthly, "cspline");

Nótese que, en este caso, la previsión de la serie (hecha con funciones Extend*) necesaria para la extrapolación, condiciona la interpolación con splines cúbicos, de modo que los valores intermedios son distintos a los de una simple interpolación.

Note: See TracTickets for help on using tickets.