4

現在、いくつかの JAGS モデルを STAN に移植しようとしています。「stan::prob::exponential_log(N4stan5agrad3varE): Random variable is nan:0, but must not be nan!」という奇妙なエラーが表示されます。それらをデバッグするには、いくつかのローカルパラメーターの値を知りたいです。

JAGS では、任意の変数のモニターをセットアップできます。STAN はパラメータのみを監視します。ただし、パラメーターに割り当てを行うことはできません (正しく理解していれば)。

では、中間変数を監視するにはどうすればよいでしょうか。

誰かが私が犯したばかげた間違いを見た場合に備えて、モデル コードも貼り付けます。ただし、同じモデルを二重指数関数 (2 つのレート) の CDF として定式化できることを認識していることに注意してください。これは私が計画したものを簡略化したものです。

Model:

data {
    int y[11]; // 
    int reps[11];
    real soas[11]; 

}
parameters {
    real<lower=0.001,upper=0.200> v1;
    real<lower=0.001,upper=0.200> v2;

}


model {
    int dif[11,96];
    real cf[11];

    real p[11];

    real t1[11,96];
    real t2[11,96];

    for (i in 1:11){
        for (r in 1:reps[i]){     
            t1[i,r]  ~ exponential(v1);
            t2[i,r]  ~ exponential(v2);
            dif[i,r] <-  (t1[i,r]+soas[i]<=(t2[i,r]));

            }
        cf[i] <- sum(dif[i]);
        p[i]  <-cf[i]/reps[i];
        y[i] ~ binomial(reps[i],p[i]); 
    }

}

ここにいくつかのダミーデータがあります:

psy_dat = { 
         'soas' :  numpy.array(range(-100,101,20)),
            'y' :  [47, 46, 62, 50, 59, 47, 36, 13, 7, 2, 1],
         'reps' :  [48, 48, 64, 64, 92, 92, 92, 64, 64, 48, 48]
          }
4

1 に答える 1

7

この特定のケースでは、問題はt1(さらに言えt2ば) が初期化され、可能性NaNを利用する前に何にも変更されないことです。exponential私の推測では、事後予測分布からそれらを描画する場合は、ブロック内にある必要がありt1ます。t2generated quantities

前述のように質問に答えるにはprint()、モデル ブロック内でステートメントを使用して、問題のある Stan プログラムをデバッグできます。本当に中間体を保存したい場合transformed parametersは、Stan プログラムのブロック内でそれらを宣言して定義する必要があります。

于 2015-01-13T20:38:49.110 に答える