根据 stan 用户指南的第 26.3 节,我试图指定一个模型,其中观察值是四舍五入的,并且已知真实值落在一定范围内(在观察到的和观察到的 -1 之间)。
STAN 代码如下。查看 xtrue 的跟踪图,采样值不受 (xobs-1,xobs) 之间的限制。任何帮助表示赞赏。
library(rstan)
rstan_options(auto_write = FALSE)
options(mc.cores = parallel::detectCores())
nobs=10
xtrue=runif(nobs,0,5)
xobs=ceiling(xtrue+rnorm(nobs,0,1))
dat=list(N=length(xobs),x=xobs)
init_fun <- function() {list(xtrue=xobs-.5) }
m="
data {
int<lower = 1> N;
real x[N];
}
parameters {
real xtrue[N];
}
model{
for(i in 1:N){
increment_log_prob(normal_log(xtrue[i], x[i], 1));
increment_log_prob(-log_diff_exp(normal_cdf_log(x[i],0,1),
normal_cdf_log(x[i]-1,0,1)));
}
}
"
fit=stan(model_code=m, data = dat,iter = 2000, chains = 1,thin=3,init=init_fun)
parms=extract(fit,c('xtrue'))
xtrue <- colMeans(parms[['xtrue']])
head(xobs)
head(xtrue)
traceplot(fit)
