使用stan从倾斜正态分布中得出

时间:2017-04-19 12:41:01

标签: r normal-distribution stan

有没有办法从stan中的偏斜正态分布中得出?如果没有,有没有办法从正态分布中绘制然后转换为偏斜正常?

更新

我在stan手册中找到了y~skew_normal(mu, sigma, alpha),但是当我使用参数

示例1000个值时

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值。

1 个答案:

答案 0 :(得分:2)

运行此模型:

parameters { real y; } model { y ~ skew_normal(1, 10, -1000); }

我没有得到无限的吸引力。不过,我确实得到了很多分歧,这意味着数字不稳定。即使我降低初始步长并提高目标接受率,这也是正确的。

如果偏差参数为-10而不是-1000,则该问题就会消失。

可能有一些方法可以改变内部实现,以获得极端偏斜值的更多稳定性,但在-1000时它肯定存在数值问题。