3

有没有办法从 stan 的偏态正态分布中提取?如果没有,有没有办法从正态分布中提取然后转换为偏斜正态分布?

更新

y~skew_normal(mu, sigma, alpha)在 stan 手册中找到了,但是当我使用参数对例如 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值。

4

1 回答 1

2

运行这个模型:

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

我没有无限抽奖。不过,我确实有很多分歧,这意味着数字不稳定。即使我降低初始步长并提高目标接受率也是如此。

使用 -10 而不是 -1000 的偏斜参数,这个问题就消失了。

可能有一些方法可以更改内部实现,以提高极端偏斜值的稳定性,但使用 -1000 肯定会出现数值问题。

于 2017-04-19T19:35:29.570 回答