在Stan中设置一个分层多项式处理树

时间:2015-11-01 11:01:55

标签: stan

我在Stan中设置Hierarchical Multiomial Processing树时遇到了麻烦。作为一个起点,我试图在这里为简单模型添加层次结构:

https://github.com/stan-dev/example-models/blob/master/Bayesian_Cognitive_Modeling/CaseStudies/MPT/MPT_1_Stan.R

我不确定为什么代码不起作用。任何帮助将不胜感激。

示例数据(基于Julia语法):

Nsub = 2
Ntrials = 100
FCat = [20 60 20;30 50 20]



data {  
  // Number of subjects 
  int<lower=1> Nsub;   
  // Number of Trials
  int<lower=1> Ntrials;  
   // Data
  int<lower=0,upper=Ntrials> FCat[Nsub,4];  

}
parameters {
  vector<lower=0,upper=1>[Nsub] c;
  vector<lower=0,upper=1>[Nsub] r;
  vector<lower=0,upper=1>[Nsub] u;

  real<lower=0> c_omega;
  real<lower=0> r_omega;
  real<lower=0> u_omega;

  real<lower=0,upper=1> c_kappa;
  real<lower=0,upper=1> r_kappa;
  real<lower=0,upper=1> u_kappa;

} 
transformed parameters {
    simplex[4] theta[Nsub];

    real<lower=0> c_A;
    real<lower=0> c_B;
    real<lower=0> r_A;
    real<lower=0> r_B;
    real<lower=0> u_A;
    real<lower=0> u_B;

    c_A <- c_kappa*c_omega;
    c_B <- (1-c_kappa)*c_omega;
    r_A <- r_kappa*r_omega;
    r_B <- (1-r_kappa)*r_omega;
    u_A <- u_kappa*u_omega;
    u_B <- (1-u_kappa)*u_omega;

    // Create category responses
    for (i in 1:Nsub){
      theta[i,1] <- c[i]*r[i];
      theta[i,2] <- (1 - c[i])*sqrt(u[i]);
      theta[i,3] <- (1 - c[i])*2*u[i]*(1 - u[i]);
      theta[i,4] <- c[i]*(1 - r[i]) + (1 - c[i])*sqrt(1 - u[i]);
    }


}
model {
  // HyperPriors
  c_omega ~ gamma(2,8);
  r_omega ~ gamma(2,8);
  u_omega ~ gamma(2,8);

  c_kappa ~ beta(50,50);
  r_kappa ~ beta(50,50);
  u_kappa ~ beta(70,30);

  // Priors
  c ~ beta(c_A, c_B);
  r ~ beta(r_A, r_B); 
  u ~ beta(u_A, u_B); 
  for (i in 1:Nsub){
        FCat[i] ~ multinomial(theta[i]);
   }
}

1 个答案:

答案 0 :(得分:0)

sqrt()函数只占用标量(real或int)的平方根,返回实数。

您可以使用print()查看您的值是否为1。或者您可以自己进行测试并拒绝他们。在单面变换的手册中给出了单纯形的通常的断纸结构。通常的方法是将第一个值设置在0和1之间,然后将下一个值设置为左边的一部分(1 - 第一个值),依此类推。我们还内置了softmax。您必须小心使用softmax参数化进行识别 - 除非您将其中一个输入设置为常量,否则先验将很重要。