我正在尝试通过 rstan 来学习 Stan (因为我熟悉 R)。我尝试运行一个简单的混合帕累托和正态模型。它编译得很好(据我所知),但它无法采样,给我错误:
“(-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)
Run Code Online (Sandbox Code Playgroud)
这个例子与 …