Version 8 (modified by 15 years ago) (diff) | ,
---|
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 submodelosMMS::@Submodel
formados por una mvariableMMMS::@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ámetrosMMS::@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 = [[ ... ]] ]]);