wiki:RandVar
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.

Paquete RandVar

El paquete RandVar permite la creación de variables aleatorias. Las variables aleatorias se basan en una gramática y en un tipo de distribución o muestra. Por ejemplo, es igualmente posible: crear una variable aleatoria tipo Real con distribución normal, crear una variable aleatoria tipo Serie a partir de una estructura ARIMA o crear una variable aleatoria tipo Matrix basado en una muestra de matrices de igual dimensión.

Variables aleatorias de tipo Real

Para crear una variable aleatoria tipo Real con distribución Normal, se especificará la media y la desviación típica. Por ejemplo:

RandVar::@Real.Normal r1 = RandVar::@Real.Normal::Default(0, 10);

Es posible obtener un ejemplo de esta variable usando el método GetExperiment():

Real ej1 = r1::GetExperiment(?);

De forma similar, utilizando el método GetExperiment() es posible obtener una serie ejemplo a partir de una variable aleatoria tipo Serie, u obtener una matriz ejemplo a partir de una variable aleatoria tipo Matrix.

También podemos crear una variable aleatoria tipo Real a partir de un conjunto de valores reales.

Set sample = [[1, 2, 1.2, 3, 1.1, 1.9, 2.2, 5, 1.3]];
RandVar::@Real.Sample r2 = RandVar::@Real.Sample::Default(sample);

Para conocer la media y la desviación típica usamos GetMean() y GetSigma, por ejemplo:

Real rMean = r2::GetMean(?);
Real rSigma = r2::GetSigma(?);

Variables aleatorias de tipo Matrix

Para crear una variable aleatoria tipo Matrix con distribución normal, podemos especificar (en este orden): la cantidad de filas, cantidad de columnas, la media y la desviación típica. Por ejemplo:

RandVar::@Matrix.Normal m1 = RandVar::@Matrix.Normal::Definition(10, 2, 1, 10);

Podemos crear una variable aleatoria tipo Matrix basados en una muestra como sigue:

RandVar::@Matrix.Sample m2 = RandVar::@Matrix.Sample::Default(
  For(1, 1000, Matrix (Real k) 
  { 
    m1::GetExperiment(?) 
  })
);

Si queremos conocer su media y desviación típica, usamos:

Serie mean = m2::GetMean(?);
Serie stddev = m2::GetVariance(?);

Variables aleatorias de tipo Serie

Podemos crear varias clases de variables aleatorias tipo Serie. Por ejemplo: basados en una distribución normal, a partir de una muestra, a partir de la especificación de una estructura ARIMA, o a partir de una distribución BoxCox Normal.

En el caso de variables aleatorias tipo Serie con distribución Normal pudiera crearse especificando (en ese orden): fechado, fecha inicial, fecha final, media y desviación típica. Por ejemplo:

RandVar::@Serie.Normal ts1 = RandVar::@Serie.Normal::Definition(C, y2008, y2009, 0, 9);

Una alternativa es especificar una Serie con los valores de la media y la desviación típica que puede ser un valor real o una Serie. Ejemplo:

Serie serieMean = ...
Serie serieSigma = ...
...
RandVar::@Serie.Normal ts1 = RandVar::@Serie.Normal::Default(serieMean, 5);
RandVar::@Serie.Normal ts2 = RandVar::@Serie.Normal::Default(serieMean, serieSigma);

Un ejemplo de variable aleatoria tipo Serie creada a partir de una muestra:

Set sample = For(1, 1000, Serie (Real k) 
{ ts1::GetExperiment(?) });
RandVar::@Serie.Sample ts3 = RandVar::@Serie.Sample::Default(sample);

Podríamos conocer su media y desviación típica por medio de GetMean() y GetSigma(). Ejemplo:

Serie mean = ts3::GetMean(?);
Serie variance = ts3::GetVariance(?);

Variables aleatorias de tipo Real.SampleBBM

Este tipo de variables surgen de la necesidad de almacenar las cadenas de simulación de la estimación de los parámetros de los modelos, ya que éstos se guardan en variables de tipo muestra, es decir, son instancias de la clase @Real.Sample.
Uno de los atributos de esta clase es la matriz de la muestra, entonces, si tenemos simulaciones muy grandes de estimaciones con muchos parámetros queda un archivo muy pesado y en realidad, no es necesario guardar toda la matriz cuando los datos más demandados suelen ser la media, la varianza….etc.

Entonces se ideó un tipo de variable que tuviera las características de una variable muestral @Real.Sample pero que en vez de almacenar toda la matriz de datos tan solo guardara una ruta donde se encuentra un archivo .bbm que guarda la matriz de los datos.
Entonces, cada vez que se requirieran los datos llamamos al archivo .bbm y cargamos la matriz.
También guardamos algunos estadísticos básicos (media, varianza, mínimo y máximo) como atributos y así no es necesario cargar la matriz para calcularlos.

Pero como ya hemos dicho antes, @Real.Sample y @Real.SampleBBM tienen los mismos métodos y por lo tanto a efectos de usuario son prácticamente iguales, donde mas difieren son en los métodos estáticos de creación.

Por ejemplo, si queremos crear una variable a partir de una matriz, necesitamos introducir una ruta con extensión .bbm para que guarde la matriz

RandVar::@Real.SampleBBM v1 = RandVar::@Real.SampleBBM::Sample(Matrix sample, Text "C:/filename.bbm")

También podemos crear una variable de este tipo a partir de una instancia de la clase RandVar::@Real.Sample

RandVar::@Real.Sample r1 = RandVar::@Real.Sample::Default(sample);
RandVar::@Real.SampleBBM v2 = RandVar::@Real.Sample::Real.Sample(r1, Text "C:/filename.bbm")

¿Cómo se utilizan en la estimación?

Es muy sencillo, tan solo es necesario introducir una variable en el ‘Settings’ de la estimación bayesiana cuando se crea ésta.
La variable de definición es un atributo de la clase @SettingsBSR y se utiliza de la siguiente forma:

Si queremos que los parámetros se guarden en variables @Real.SampleBBM:

Text _.parametersType = "SampleBBM";

Si queremos que los parámetros se guarden en variables @Real.Sample (como antes):

Text _.parametersType = "Sample";

Ejemplo de estimación:

  MMS::@Estimation estimation = MMS::Container::ReplaceEstimation([[
    Text _.name = "BSR";
    MMS::@Model _.model = MMS::Container::GetModel([["ModelA","1"]]);
    MMS::@SettingsBSR _.settings = [[
      Real mcmc.sampleLength = 200;
      Text _.parametersType = "SampleBBM"
    ]]
  ]]);

Importante

Cuando guardamos la estimación, se nos guardará el archivo .bbm que contiene las cadenas de la estimación al lado del archivo .oza de la estimación.
Entonces, si queremos mover el .oza de sitio tenemos que arrastrar con él, el archivo .bbm siempre que queramos conservar las cadenas, si no, los únicos valores de la estimación de los parámetros que se nos guardarán serán los estadísticos básicos (media, varianza, mínimo y máximo).

Lo mismo para las previsiones, ya que las previsiones contienen estos parámetros y por lo tanto su archivo .bbm.

Last modified 7 years ago Last modified on Jun 8, 2012, 1:43:57 PM