2017-04-19 111 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