2017-04-19 61 views
2

有没有一种方法可以从stan中的偏斜正态分布绘制?如果没有,是否有一种方法可以从正态分布中提取,然后转换为正常偏态?使用stan绘制偏斜正态分布

UPDATE

我在斯坦手动发现y~skew_normal(mu, sigma, alpha),但是当我与参数

mu=1, sigma=10, alpha=-1000

样品例如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

如果您只是想随机绘制,请在'generated quantities'块中使用'skew_normal_rng'。如果您的问题实际上是“我如何估计被假定为偏斜正常的数据生成过程的参数?”那么你需要使用'skew_normal'采样语句或'skew_normal_lpdf'函数。 –

+0

@BenGoodrich我更新了问题 – quant

+0

好的。那是一个错误。 –

回答

2

运行这个模型:

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

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

如果偏斜参数是-10而不是-1000,那么问题就会消失。

有很多方法可以改变极端歪斜值更稳定的内部实现,但它与-1000绝对数值上存在问题。

+0

我更新的问题 – quant

+0

这个问题也发生歪斜参数-4 – quant