【问题标题】:Stan - Mixture of NormalsStan - 法线混合
【发布时间】:2015-11-06 06:06:18
【问题描述】:

我正在使用 RStan 来拟合两个法线的混合。

data {
 int<lower = 1> K;
 int<lower = 1> N;
 real y[N];
}
parameters {
 simplex[K] theta;
 real mu[K];
 real<lower = 0> sigma;
}
model{
 real ps[K]; // place-holder for log component densities
 sigma ~ uniform(0.5, 1.5);
 mu ~ normal(0, 10);
 for (n in 1:N){
  for (k in 1:K) {
   ps[k] <- log(theta[k]) + normal_log(y[n], mu[k], sigma);
  }
  increment_log_prob(log_sum_exp(ps)); // log_sum_exp(lp1,lp2) =    log(exp(lp1) + exp(lp2))
  }
}

我想添加一个条件,即 mu[1] 小于 mu[2]。我该怎么做?

感谢您的帮助

【问题讨论】:

  • 这种统一的先验将不起作用,因为有些值满足声明的约束(例如,2),这些值不受支持。更新约束以匹配统一,此时您不需要统一采样语句。无论你做什么,都不要试图用制服来拒绝,这就是这个程序所做的。
  • @BobCarpenter,非常感谢,鲍勃。我以为我已经从用户组中删除了我的问题 - 很抱歉这个多余的问题。

标签: rstan


【解决方案1】:

Stan 中有一个有序类型。将mu 声明为ordered[K] mu

【讨论】:

  • 这使得所有的值都有序,并且 OP 没有说 K 是什么或者它们是否都是有序的。如果 K = 2,那么您可能需要使用 log_mix() 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2011-04-08
相关资源
最近更新 更多