3

私は学んrstanでおり、現在、Gelmans の「Bayesian Data Analysis」の演習を解いています。参考までに、これは第 3 章の例 5 についてです。

次のように失敗し続けます。

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)

面白いことに、2 番目の tru_val サンプリングをtru_val[i] ~ normal(o_data[i],0.5);モデルに変更すると、問題なく評価されます。

これまでのところ、スタンコードで試しました:

  • サンプリング ステートメントの再配置
  • ヘルパー変数の導入
  • increment_log_p明示的にステートメントを書く
  • 誤ってキーワードを使用した場合に備えて変数名を変更する
  • スタンコードに印刷ステートメントを追加します
  • mu を 10 に設定
  • 一様分布における制約の緩和/拡大
  • および上記の組み合わせ

tru_val の値を出力したとき、ステートメントの順序に関係なく、通常は -2 から +2 の間の 0 付近の値を出力したので、驚くべきことに気付きmu <- 10; sigma <- 1;ました (データセクションで) とサンプリングステートメントを設定してもtru_val[i] ~ uniform(9.5,10.5). これらの数値を取得する方法がよくわかりません。

誰かがこれに光を当ててくれることを本当に願っています。

4

1 に答える 1

3

変数の制約は、使用しているディストリビューションのサポートと一致する必要があります。の場合tru_val[i] ~ uniform(9.5, 10.5)tru_valとして定義する必要がありますreal<lower=9.5,upper=10.5> tru_val[5]

このステートメント ではtru_val[i] ~ normal(mu, sigma)、Stan は正規分布から標本を抽出して に設定していませんtru_val[i]。結合分布関数 (対数空間) を計算しています。この場合、tru_val[i]与えられたmuand sigma(対数空間) の正規確率分布関数を評価しています。

(質問するのに最適な場所は、Stan ユーザーのメーリング リストです。)

于 2014-09-03T17:42:49.277 に答える