= 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 = ; Text _.description = "..."; Text _.variableName = ; Date _.modelBegin = ...; Date _.modelEnd = ...; @MMS.Transformation _.transformation = BoxCox(0,0); Text _.labelARIMA = "PDIFARMA" ]]) }}} '''Código en MMS_0.6''' {{{ MMS::@Submodel submodel = model::CreateSubmodel([[ Text _.name = ; Text _.description = "..."; NameBlock _.output = [[ Text _.name = ; Text _.variableIdentifier = ; MMS::@Transformation _.transformation = MMS::@Transformation.BoxCox::Default(0,0) ]]; Date _.begin = ...; Date _.end = ...; NameBlock _.noise = [[ Text _.type = "ARIMA"; Text _.arimaLabel = "PDIFARMA"; Real _.sigma = 1 // opcional, valor inicial de la sigma muestreada ]] }}} Véase el apartado de [wiki:upgrade/transformations 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 = ; Text _.description = "..."; Polyn _.transferFunction = ; @MMS.Transformation _.transformation = ; Text _.variableName = ]]); Real model::CreateExpTerm([[ Text _.baseExpTermName = ; Set _.outputNames = [[ ]] ]]); }}} '''Código en MMS_0.6''' {{{ MMS::@ExpTerm expTerm = submodel::CreateExpTerm_TransferFunction([[ Text _.name = ; Text _.description = "..."; NameBlock _.input = [[ Text _.name = ; Text _.variableIdentifier = ]]; Polyn _.transferFunction = ]]); }}} Nótese que el uso de las transformaciones ha cambiado. Véase el apartado de [wiki:upgrade/transformations 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 = ; 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 = ; Real _.average = ; Real _.sigma = ]]) }}} '''Código en MMS_0.6''' {{{ MMS::@Parameter parameter = model::GetParameter(); Real parameter::SetPrior([[ Real _.mean = ; Real _.sigma = ]]); }}} === Restricciones (Constraints) === '''Código en MMS_0.5''' {{{ Real model::CreateConstraint([[ Anything _.element = ; Real _.inferiorValue = ; Real _.superiorValue = ]]) }}} '''Código en MMS_0.6''' {{{ MMS::@Parameter parameter = model::GetParameter(); Real parameter::SetConstraint([[ Real _.inferiorValue = ; Real _.superiorValue = ]]); }}}