有没有办法从stan中的偏斜正态分布中得出?如果没有,有没有办法从正态分布中绘制然后转换为偏斜正常?
更新
我在stan手册中找到了y~skew_normal(mu, sigma, alpha)
,但是当我使用参数
mu=1,
sigma=10,
alpha=-1000
我也获得了一些-inf
值。有什么想法吗?
更新2
我的testing.stan
data{
real mu;
real sigma;
real alpha;
}
model{
}
generated quantities{
real temp;
temp = skew_normal_rng( mu, sigma, alpha);
}
然后我的testing.R
文件
sdata <- list(
mu=1,
sigma=10,
alpha=-1000
)
model <- stan_model("stan code//testing.stan")
system.time(
samples <- sampling(model,data=sdata,seed=42,
chain=1,algorithm="Fixed_param",
iter=10000,thin=1,control=list(max_treedepth=9)
)
)
object <- rstan::extract(samples)
# hist(object$temp,breaks=100)
# plot(density(object$temp))
# mean(is.finite(object$temp))
# sum(!is.finite(object$temp))
sort(object$temp)
运行sort(object$temp)
后,我获得了一些-inf
值。
答案 0 :(得分:2)
运行此模型:
parameters {
real y;
}
model {
y ~ skew_normal(1, 10, -1000);
}
我没有得到无限的吸引力。不过,我确实得到了很多分歧,这意味着数字不稳定。即使我降低初始步长并提高目标接受率,这也是正确的。
如果偏差参数为-10而不是-1000,则该问题就会消失。
可能有一些方法可以改变内部实现,以获得极端偏斜值的更多稳定性,但在-1000时它肯定存在数值问题。