close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Opened 12 years ago

Last modified 12 years ago

#1652 accepted defect

BysMcmc: Fijando la Sigma2 con BSR

Reported by: Pedro Gea Owned by: Víctor de Buen Remiro
Priority: normal Milestone:
Component: Kernel Version: 3.1
Severity: normal Keywords:
Cc:

Description

Se encuentra un comportamiento inesperado al intentar fijar la Sigma2 de un nodo en BSR.

Para ello los métodos del import Get.Sigma2 y Get.SigmaPrior devuelven respectivamente el real <Sigma2> con el que se desea fijar y una cadena vacía ("").

Con esto, la declaración en archivos .bsr (indicando una matriz de covarianza diagonal) queda como:

  ~ Normal(0,<Sigma2> * Cov = {$ VMatrix Eye(<N>); $});

pero el valor de esta <Sigma2> se ignora, tomándose 1 en cualquier caso.

La especificación equivalente que fija la sigma con un prior:

  ~ Normal(0,SigmaBlk::<Node>::sigma2 
    ~ @Bsr.Sigma.Prior.InverseGamma(<Sigma2>,1) * Cov = {$ VMatrix Eye(<N>); $});

sí permite la estimación deseada, aunque añade un nuevo parámetro que permanece fijo durante toda la estimación.

Al tener una vía alternativa no supone un problema insavable, pero sería conveniente solucionar el comportamiento de BSR en el primer caso.

Attachments (2)

Test__2.bsr.rar (44.3 KB) - added by Pedro Gea 12 years ago.
Test__2.bsr_2.rar (24.5 KB) - added by Pedro Gea 12 years ago.

Download all attachments as: .zip

Change History (6)

comment:1 Changed 12 years ago by Víctor de Buen Remiro

Status: newaccepted

comment:2 Changed 12 years ago by Víctor de Buen Remiro

Necesitaría un ejemplo para poder replicar y arreglar este problema.

comment:3 Changed 12 years ago by Pedro Gea

Adjunto los archivos .bsr para reproducir un ejemplo muy sencillo: una regresión de una matriz de 100 datos (con una sigma de 0.2) y un input (con parámetro 0.2).

Si en la declaración del modelo (ejemplo: Test__2.bsr.rar archivo primary.bsr) se indica:

Submodel::Noise[100]
  ~ Normal(0,0.04 * Cov = {$ VMatrix Eye(100); $});

el resultado de la estimación del parámetro es:

1.97376791158 0.165202795771

Sin embargo (ejemplo: Test__2.bsr_2.rar archivo primary.bsr) si se indica:

Submodel::Noise[100]
  ~ Normal(0,SigmaBlk::Submodel::sigma2 ~ @Bsr.Sigma.Prior.InverseGamma(0.2,1)  * Cov = {$ VMatrix Eye(100); $});

el coda.summary de los parámetros es:

1.97771475514 0.0724041984373
0.2 0.0

Para comprobar que el primer caso se está asumiendo erróneamente sigma = 1 podemos indicar:

Submodel::Noise[100]
  ~ Normal(0,SigmaBlk::Submodel::sigma2 ~ @Bsr.Sigma.Prior.InverseGamma(1,1)  * Cov = {$ VMatrix Eye(100); $});

cuyos resultados son:

1.97260624419 0.162033674175
1.0 0.0

Changed 12 years ago by Pedro Gea

Attachment: Test__2.bsr.rar added

Changed 12 years ago by Pedro Gea

Attachment: Test__2.bsr_2.rar added

comment:4 Changed 12 years ago by Víctor de Buen Remiro

Aunque no afecta al hecho explicado en el ticket, quiero puntualizar que si lo que se quiere poner es un prior de sigma=0.2, con el peso que se quiera, hay que tener en cuenta que el parámetro de escala de la estructura @Bsr.Sigma.Prior.InverseGamma se refiere a la varianza y no a la desviación típica por lo que hay que pasarle 0.04 y no 0.02

Submodel::Noise[100]
  ~ Normal(0,SigmaBlk::Submodel::sigma2 ~ @Bsr.Sigma.Prior.InverseGamma(0.04,1)  * Cov = {$ VMatrix Eye(100); $});

El resultado es entonces

varName mean_ sd_
Submodel__ExpTerm1__Linear.0 1.97364491913 0.0322626334469
SigmaBlk::Submodel::sigma2 0.04 0.0

que efectivamente incluye un parámetro sigma2 extra con cadena constante.

Mientras veo cómo solucionar el problema, el caso determinista o de sigma fija, se puede escribir alternativamente como

Submodel::Noise[100]
  ~ Normal(0,1 * Cov = {$ VMatrix Eye(100)*0.04; $});

cuyo resultado es congruente con el prior determinista anterior pero sin el absurdo parámetro sobrante

varName mean_ sd_
Submodel__ExpTerm1__Linear.0 1.97374398935 0.0327935176045
Note: See TracTickets for help on using tickets.