Opened 14 years ago
Closed 14 years ago
#569 closed doubt (fixed)
Diferencias entre Model y Model.Forecast
Reported by: | imendez | Owned by: | Pedro Gea |
---|---|---|---|
Priority: | critical | Milestone: | Release 0.6 |
Component: | Forecast | Keywords: | |
Cc: |
Description
Hola, un objeto Model tiene atributos como el nombre, si está guardado, la descripción, etc. accesibles mediante los correspondientes métodos:
NameBlock for = MMS::Container::GetForecast(1); NameBlock mod = for::GetModel(1); Text nameMod = mod::GetName(?); Text description = mod::GetDescription(?); NameBlock subMod = mod::GetSubmodel(1);
Sin embargo, los resultados de una previsión:
NameBlock mod3 = for::GetModel.Forecast(1);
no tienen esos atributos ni, obviamente, los métodos que permiten obtenerlos:
Text nameMod3 = mod3::GetName(?); //ERROR Text description3 = mod3::GetDescription(?); //ERROR
Además, mientras que en Model el método GetOutput(?) devuelve un NameBlock con la variable y para obtener los datos hay que aplicar GetOutput(?)::GetData(?), en un Model.Forecast el mismo método devuelve directamente los datos:
NameBlock out = subMod::GetOutput(?); Anything outData = out::GetData(?); NameBlock out3 = subMod3::GetOutput(?); //ERROR Anything outData3 = subMod3::GetOutput(?); //Serie (o matriz) output
¿A qué se deben estas diferencias?
Change History (3)
comment:1 Changed 14 years ago by
Milestone: | → Release 0.6 |
---|
comment:2 Changed 14 years ago by
Status: | new → accepted |
---|---|
Type: | defect → doubt |
comment:3 Changed 14 years ago by
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Respecto a los métodos de la clase @Submodel.Forecast (en la descripción del tique se refiere por error a @Model.Forecast) sí hay una cuestión de terminología que merece aclararse.
En el diseño de la definición de un submodelo (@Submodel) los métodos GetOutput
y GetNoise
dan acceso respectivamente a las instancias encargadas de: (i) la definición de la m-variable que será el "output" (@MVariable) y (ii) la estructura del ruido del submodelo (@Noise).
Sin embargo en el diseño de la clase de resultados del submodelo (@Submodel.Results) los métodos anteriores hacen referencia directamente a resultados y no a otras instancias (que dicho sea de paso no existen). El diseño de las clases de resultados y previsiones (módulo 03) no es el mismo que el del módulo de modelos (módulo 02) aunque intenta aproximarse en la medida de lo posible.
Los métodos GetOutput
y GetNoise
en la clase @Submodel.Results forman parte de un conjunto de métodos que ofrecen los siguientes resultados:
- Output
- Noise
- Filter
- Residuals
- Prediction
que verifican la siguiente relación:
- Output = Noise + Filter = Prediction + Residuals
Como se menciona en #680, las instancias de @Model.Results (como pasa también con las demás clases de resultados) están encargadas de obtener los resultados relativos a una instancia de @Model (un modelo). Internamente hacen referencia tanto al modelo como a los parámetros estimados ofreciendo así un nuevo conjunto de métodos: los resultados.
Sí hay que dejar claro es que una instancia de @Model.Results (u otra clase de resultados) no es una instancia de @Model (o de la clase que corresponda) sino una instancia, a modo de capa que la contiene y que junto a los parámetros estimados incorpora nuevos mecanismos y métodos para el acceso a resultados y previsiones.
Las clases de previsiones no son más que una ampliación de las clases de resultados, así, por ejemplo, una instancia de @Model.Forecast también los es de @Model.Results.
Las clases de previsiones incorporan nuevos métodos a las clases de resultados.
Por ejemplo si una instancia de @Submodel.Results ofrece un método
GetNoise
que devuelve el resultado "noise" de la estimación, la instancia de @Submodel.Forecast ofrece, no sóloGetNoise
sino tambiénGetNoise.Forecast
que devuelve la previsión del "noise".La posibilidad de dar acceso a todos los métodos de la instancia de referencia (la definición) mediante un método
::GetDefinition(?)
ya se sugiere en #680 y está recogida en #563. En ese caso se podría acceder a dicha información así: