wiki:upgrade/models
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.

Actualización a MMS_0.6

Modelos

Los modelos en MMS_0.6 tienen una estructura ligeramente distinta a los de los modelos en MMS_0.5. Los cambios más llamativos son:

  • Los outputs de MMS_0.5 MMS.Output pasan a ser submodelos MMS::@Submodel formados por una mvariable MMMS::@MVariable que hace de output un conjunto de términos explicativos y un noise.
  • Los términos explicativos se construyen sobre cada submodelo MMS::@ExpTerm desapareciendo así los términos base y los términos explicativos multi-output. Para conseguir parámetros internodales (pertenecientes a varios submodelos) aparece una nueva clase para definir equivalencias entre parámetros MMS::@MEquivalence, es decir indicar que dos parámetros han de ser estimados como el mismo a ser posible.
  • El ruido o noise dispone de una clase propia destinada a gestionar la sigma2 del submodelo (o jerarquía) y también los parámetros relativos a su estructura como en el caso de los modelos ARIMA.
  • La información a priori para parámetros (distribución a priori y restricciones) está contenida en el parámetro y se gestiona desde él.

Creación de modelos

Los modelos se crean con argumentos similares a los encontrados en MMS_0.5. La diferencia más importante es que aparece un nuevo argumento _.dataSets destinado a recoger los datasets que desean ser utilizados. Téngase también en cuenta el nuevo nombre del contenedor de MMS.

Código en MMS_0.5

Real MMS::CreateModel([[
  Text _.name = "modelo";
  Text _.description = "..."
]]);
@MMS.Model model = MMS::GetModel2("Mat.Veh","1.0");

Nótese que los modelos en MMS no son de ningún tipo. Argumentos como _.type:

  Text _.type = "ARIMAX";

llevan obsoletos ya un tiempo. Este rol lo desempeñan los submodelos (o outputs en MMS_0.5).

Código en MMS_0.6

MMS::@Model model = MMS::Container::CreateModel([[
  Text _.name = "modelo";
  Text _.version = "test.1";  // continua siendo opcional
  Text _.description = "...";
  Set _.dataSets = [[ "dataset1_identifier", .. ]]
]]);

Nótese que en MMS_0.6 la versión de los modelos recupera su verdadero significado e itera a partir de un modelo guardado al hacer cambios. El texto que representa a la versión del modelo ha de acabar en un número entero (que es el que se iterará) precedido por un '.'.

Creación de submodelos

Como se adelantaba la estructura que en MMS_0.5 recogían los outputs MMS.Output, ahora está representada por los submodelos MMS::@Submodel.

Submodelos ARIMAX

Un submodelo de tipo ARIMAX se crea de manera semejante a en MMS_0.5. Prestemos un poco más de atención a sus argumentos:

Código en MMS_0.5

Real model::CreateOutputARIMA([[
  Text _.name = <nombre>;
  Text _.description = "...";
  Text _.variableName = <variable>;
  Date _.modelBegin = ...;
  Date _.modelEnd = ...;
  @MMS.Transformation _.transformation = BoxCox(0,0);
  Text _.labelARIMA = "P<period>DIF<difference>AR<ar>MA<ma>"
]])

Código en MMS_0.6

MMS::@Submodel submodel = model::CreateSubmodel([[
  Text _.name = <nombre>;
  Text _.description = "...";
  NameBlock _.output = [[
    Text _.name = <nombre_output>;
    Text _.variableIdentifier = <variable>;
    MMS::@Transformation _.transformation = MMS::@Transformation.BoxCox::Default(0,0)
  ]];
  Date _.begin = ...;
  Date _.end = ...;
  NameBlock _.noise = [[
    Text _.type = "ARIMA";
    Text _.arimaLabel = "P<period>DIF<difference>AR<ar>MA<ma>";
    Real _.sigma = 1 // opcional, valor inicial de la sigma muestreada
  ]]

Véase el apartado de transformaciones.

Las m-variables

Las variables del modelo (@MMS.ModelVariable en MMS_0.5 y MMS::@MVariable en MMS_0.6) son los objetos encargados de representar a una variable (del módulo de variables) en un modelo (concretamente en un submodelo). Son los outputs y los inputs.

Aunque en MMS_0.5 outputs (@MMS.Output) e inputs (@MMS.Input) derivaban de la misma clase @MMS.ModelVariable presentaban características muy distintas, y los primeros asumían todas las características del submodelo gracias a la relación uno-uno que hay entre submodelos y outputs.

En MMS_0.6 esta diferencia no se observa y tanto outputs como inputs son instancias de la clase MMS::@MVariable. Las instancias se crean cuando es necesario automáticamente a través de los constructores de los submodelos y los términos explicativos. En MMS_0.6 todas las m-variables forman un conjunto gestionable desde el modelo MMS::@Model a través de sus métodos correspondientes.

Creación de términos explicativos

En MMS_0.6 desaperece el mecanismo de (i) crear términos explicativos base, y luego (ii) crear términos epxlicativos asociando los primeros a un output. Los términos explicativos se crean directamente sobre el submodelo en el que van a participar.

Código en MMS_0.5

Real model::CreateBaseExpTermOmega([[
  Text _.name = <nombre>;      
  Text _.description = "...";
  Polyn _.transferFunction = <transfer>;
  @MMS.Transformation _.transformation = <transformation>;
  Text _.variableName = <variable>
]]);
Real model::CreateExpTerm([[
  Text _.baseExpTermName = <nombre>;
  Set  _.outputNames = [[ <submodelo> ]]
]]); 

Código en MMS_0.6

MMS::@ExpTerm expTerm = submodel::CreateExpTerm_TransferFunction([[
  Text _.name = <nombre>;      
  Text _.description = "...";
  NameBlock _.input = [[
    Text _.name = <nombre_input>;
    Text _.variableIdentifier = <variable>
  ]];
  Polyn _.transferFunction = <transfer>
]]);

Nótese que el uso de las transformaciones ha cambiado. Véase el apartado de transformaciones.

Creación de términos explicativos multioutput. Equivalencias

Para la creación de términos explicativos multioutput, simplemente hay que (i) crear las términos explicativos en cada submodelo y después (ii) crear una equivalencia entre los parámetros que se deseen considerar el mismo.

Código en MMS_0.6

MMS::@MEquivalence mEquivalence = model::CreateMEquivalence([[
  Text _.name = <nombre>;
  Set  _.parameters = [[
    ... // información de los parámetros
  ]]
]]);

Nótese que la información para localizar un parámetro puede ser:

  • el identificador del parámetro (atributo Identifier en MMS_0.6 o Index en MMS_0.5), que para un parámetro de término explicativo tiene la forma:
    Text identifier = "SubmodelName__ExpTermName__ParameterSubclass.ParameterDegree";
    @MMS.Parameter parameter = model::GetParameter(identifier);
    
  • o un conjunto con los nombres de la estructura jerárquica del parámetro, con la forma:
    Set information = [[ "SubmodelName", "ExpTermName", [[ "ParameterSubclass", ParameterDegree ]] ]];
    @MMS.Parameter parameter = model::GetParameter(identifier);
    

Distribución a priori y restricciones

A diferencia de MMS_0.5 la información a priori (ditribución a priori y restricciones) en MMS_0.6 se ubica en los parámetros o elementos para los que se define.

Esto no supone una gran dificultad en su creación como podemos ver:

Distribución a priori (Priors)

Código en MMS_0.5

Real model::CreatePrior([[
  Anything _.element = <parameterInfo>;
  Real _.average = <mean>; 
  Real _.sigma = <sigma>
]])

Código en MMS_0.6

MMS::@Parameter parameter = model::GetParameter(<parameterInfo>);
Real parameter::SetPrior([[
  Real _.mean = <mean>;
  Real _.sigma = <sigma>
]]);

Restricciones (Constraints)

Código en MMS_0.5

Real model::CreateConstraint([[
  Anything _.element = <parameterInfo>;
  Real _.inferiorValue = <min>; 
  Real _.superiorValue = <max>
]])

Código en MMS_0.6

MMS::@Parameter parameter = model::GetParameter(<parameterInfo>);
Real parameter::SetConstraint([[
  Real _.inferiorValue = <min>; 
  Real _.superiorValue = <max>
]]);

Jerarquías

Las jerarquías en MMS_0.6 (como ecuaciones de parámetros que son) se construyen de una manera similar a los submodelos.

Cabe destacar la declaración más explicita del noise o la declaración separada de sus términos explicativos (MMS::@HierarchyTerm).

Código en MMS_0.5

Real model::CreateHierarchy([[
  Text _.name = <nombre>;
  Real _.sigma = [<sigmaFija> | ?];
  Real _.sigma0 = [? | <sigmaInicial>];
  Real _.sigmaWeight = [? | <pesoSigmaInicial>];
  Set  _.elements = <mElements>;
  Set _.hierarchyTerms = [[
    [[ <HierarchyTermName>, <coefficients> ]],
    ...
  ]];      
  Set _.sigmas = <relativeSigmas>
]])

Código en MMS_0.6

MMS::@Hierarchy hierarchy = model::CreateHierarchy([[
  Text _.name = <nombre>;
  Set  _.mElements = <mElements>;
  NameBlock _.noise = [[
    Text _.type = "Normal";
    Set _.relativeSigmas = <relativeSigmas>;
    Real _.sigma = [<sigmaInicial> | <sigmaFija>];
    Real _.sigmaFixed = [<pesoSigmaInicial | 1]
  ]]
]]);
Anything hierarchy::CreateHierarchyTerm([[
  Text _.name = <HierarchyTermName>;
  Set _.coefficients = <coefficients>
]]);
Anything hierarchy::CreateHierarchyTerm([[
  ...
]]);
Last modified 14 years ago Last modified on Aug 12, 2010, 5:11:02 PM