我正在尝试通过 rstan 学习 Stan(因为我熟悉 R)。我试过运行一个简单的混合 Pareto 和 Normal 模型。它编译得很好(据我所知),但它无法采样,给我错误:
“(-2, 2) 之间的初始化在 100 次尝试后失败。尝试指定初始值、减小约束值的范围或重新参数化模型。
调用采样器时出错;采样未完成”
可以说我已经尝试了各种方法来参数化事物,并尝试设置初始值,但都无济于事。
我的 R+rstan 代码如下:
library(rstan)
rpareto = function(n, location, shape){location/runif(n)^(1/shape)}
sdvec=runif(1e3,0.1,1)
HMFtest=list(x=rpareto(1e3,10,2)+rnorm(1e3,0,sdvec), sdev=sdvec, N=1e3)
HMF.stan <- "
data {
int<lower=0> N;
real x[N];
real sdev[N];
}
parameters {
real<lower=0,upper=20> y_min;
real<lower=0,upper=4> alpha;
real xtrue[N];
}
model {
y_min ~ lognormal(1, 1);
alpha ~ lognormal(1, 1);
xtrue ~ pareto(y_min, alpha);
for(i in 1:N){
x[i] ~ normal(xtrue[i], sdev[i]);
}
}
"
stan.test <- stan(model_code=HMF.stan, data=HMFtest, pars=c('y_min','alpha'), chains=1, iter=30000, warmup=10000)
此示例适用于 JAGS(因此我也标记了 JAGS),我可以发布该代码是否有帮助。
顺便说一句,如果我将帕累托分布更改为额外的正态分布,它运行良好(但当然会给我一个无意义的答案)。
任何关于我做错了什么的建议将不胜感激!我担心不知何故我仍然认为 JAGS 而不是 Stan,但我找不到任何将 Pareto 模型与 Stan 拟合的例子,所以我很难交叉验证我的方法。