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

Setting up a Hierarchical Multinomial Processing Tree in Stan

我在 Stan 中设置分层多项式处理树时遇到问题。作为起点,我试图在此处向简单模型添加层次结构:

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]);
   }
}

sqrt() 函数只取标量(实数或整数)的平方根,返回实数。

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