Actualización a MMS_0.6
Combinación de Previsiones
MMS permite definir de una forma cómoda restricciones lineales entre previsiones obtenidas. Es decir, las previsiones pueden modificarse en virtud de su incertidumbre para satisfacer una determinada combinación lineal entre ellas. Desde el punto de vista formal se recurre a la noción de Distancia de Mahalanobis para determinar cuanto han de modificarse las previsiones.
El tratamiento de la combinación de previsión en MMS parte de la existencia de una propia clase para ellas: MMS::@Combination
. Esta clase define los objetos <combination>
sobre los que especificaremos las contraints que queremos que se satisfagan. Asimismo dichos objetos <combination>
formarán parte del Container de MMS: MMS::Container::_.combinations
.
Antes de explicar como definir y usar los objetos combination
es importante que tengamos a mano la información necesaria y en su forma correcta para la creación de los mismos. Para ello contamos con el método CreateForecastDataSet
de la clase MMS::@Forecast
. Este método lo usamos con aquella/s previsión/es para las que queramos hacer combinación. Simplemente haríamos: Anything forecast::CreateForecastDataSet(?);
, con esto creamos un dataset
que reúne la información necesaria. Ese dataset lo podremos guardar en el repositorio (usando Save_Repository
) para un posterior uso.
Comenzamos creando un objeto combination
MMS::@Combination combination = MMS::Container::ReplaceCombination([[ Text _.name = <nombre de la combinación>; Set _.dataSets = [[ "<datset1>", "<dataset2>", .... ]] ]]);
Notemos que en el conjunto _.dataSets pondremos los nombres de los datasets que vamos a usar. Lo siguiente será crear las C-variables
, éstas definen en abstracto las variables que serán susceptibles de modificarse para satisfacer las restricciones de combinación lineal deseadas. Cada C-variable
tendrá que asociarse a una variable de las que existan en _.dataSets
.
Por lo general tendremos que crear una C-variable
por cada serie de previsión que entre en la combinación. Se crean de la forma siguiente:
Anything combination::CreateCVariable([[ Text _.name = <name>; Text _.variableIdentifier = <variablename> ]])
Como vemos la C-variable
necesita llamarse con un nombre _.name
y dar el nombre de la variable sobre la que está asociada _.variableIdentifier
.
Una vez creadas las C-variables
es el momento de crear las restricciones entre ellas, mediante el método CreateCConstraint
, para que la restricción quede definida tenemos que darle un nombre, el conjunto de C-variables
y los coeficientes a1, a2, ..., aN
que entran en la combinación lineal. Estos están especificados de la forma siguiente:
a1*C-var1 + a2*C-var2 + a3*C-var3 + .... + aN*C-varN = 0
Así creamos las restricciones:
Anything combination::CreateCConstraint([[ Text _.name = <name>; Set _.cVariables = <conjunto de nombres de las C-variables (C-var1, C-var2, ....., C-varN)>; Set _.coefficients = [[a1,a2,....,aN]] ]]);
Es importante notar que el orden de las variables debe corresponderse con el de los coeficientes.
Una vez tenemos las restricciones deseadas tenemos que crear la estrategia con la que se realizará la modificación de las previsiones, es lo que llamamos el "Fit". Esta estrategia pertenece a la clase MMS::@Fit
y la creamos de la forma siguiente:
MMS::@Fit fit = MMS::Container::CreateFit([[ Text _.name = <name>; MMS::@Combination _.combination = <combination>; MMS::@SettingsBSR _.settings = <settings> / Text _.settings ]]);
Como vemos necesitamos un nombre _.name
, la combinación sobre la que queremos el ajuste de previsiones _.combination
y una setting para espcificar la estrategia con la que se modificarán las previsiones para satisfacer las restricciones. Esta setting puede ser de la clase MMS::@SettingsBSR
si queremos que se llame a la estrategia BSR o bien puede ser simplemente Text _.settings = "SVD"
si queremos que el cálculo sea máximo verosimil.
Por último para ejecutar el fit y obtener las previsiones que cumplen las restricciones:
Real fit::Execute(?);
Los resultados los tenemos dentro del propio objeto fit. EN CONSTRUCCION