【发布时间】: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