2
我在學習rstan
,此刻我正在從Gelmans「貝葉斯數據分析」中解答練習。作爲參考,這是約5的示例在第3章stan/R中的均勻分佈導致抽樣誤差
它保持與失敗:
Initialization failed after 100 attempts.
Try specifying initial values, reducing ranges of constrained values, or reparameterizing the model.
error occurred during calling the sampler; sampling not done
這是我的R代碼裏面:
library(rstan)
scode <- "
transformed data {
real o_data[5];
o_data[1] <- 10;
o_data[2] <- 10;
o_data[3] <- 12;
o_data[4] <- 11;
o_data[5] <- 9;
}
parameters {
real mu;
real<lower=0> sigma;
real tru_val[5];
}
model {
mu ~ uniform(0.0,20.0);
sigma ~ gamma(2,1);
for (i in 1:5) {
tru_val[i] ~ normal(mu,sigma);
tru_val[i] ~ uniform(o_data[i]-0.5, o_data[i]+0.5);
}
}
"
afit <- stan(model_code = scode, verbose=TRUE)
有趣的是 - 如果我改變第二個tru_val取樣到tru_val[i] ~ normal(o_data[i],0.5);
該模型將評估得很好。
到目前爲止,我試圖在斯坦代碼:
- 重新安排採樣陳述
- 引入輔助變量
- 明確地寫
increment_log_p
聲明 - 變化的變量名的情況下,我已經accidentially使用的關鍵字
- 在斯坦編碼中添加打印語句
- settin克畝至10
- 放鬆/加寬約束在均勻分佈的上述
我發現了一些令人驚訝
mu <- 10; sigma <- 1;
(在數據部分)和採樣語句tru_val[i] ~ uniform(9.5,10.5)
。我真的不知道如何獲得這些數字。 我真的希望有人可以照亮一些光。
你能否詳細說明如何對我的問題的定義會是什麼樣子 - tru_val [I]〜均勻(o_data [I] -0.5, o_data [i] +0.5)每個條目需要不同的範圍(基於數據)。如何定義這樣一個數組? – bdecaf 2014-09-03 18:42:28
做一些reparametrization我最終可以解決這個問題。我對所有這些複雜的代碼並不滿意,但可能應該在抱怨之前瞭解更多STAN;) – bdecaf 2014-09-05 08:28:03
斯坦的範圍目前沒有向量化。它們可以是數據或參數,但不是矢量。真正的問題在於你建立模型的方式。有一個不連續點,基本上打破了哈密頓蒙特卡羅。 你可以做的一件事是定義一個從統一變量(0,1)偏移的變換參數。 – syclik 2014-09-17 19:16:48