SSブログ

Stan: Reduce Sum でなぜか結果がかわる [統計]

N-mixtureモデルをStanであてはめるのに個体数ごとの尤度を足し上げる場合、Reduce Sumをつかってマルチスレッドにすると高速化できるのではないかと、やってみました。しかし、マルチスレッドを有効にするとなぜか結果がかわってしまいました。

【2020-10-25 07:43 JST 追記】 一晩ねて落ち着いて考えてみると、log_sum_expでたすべきところを、そのままたしてしまうことになるので、結果がかわるのは当然でした。

コードです。データは、Applied Hierarchical Modeling in Ecologyの6.3節を参考に生成しています。

結果です。まず、マルチスレッドを有効にしない場合です。

> fit1$summary()
# A tibble: 3 x 10
  variable     mean   median     sd    mad       q5      q95  rhat ess_bulk ess_tail
  <chr>       <dbl>    <dbl>  <dbl>  <dbl>    <dbl>    <dbl> <dbl>    <dbl>    <dbl>
1 lp__     -383.    -382.    1.10   0.748  -385.    -382.     1.00    1178.    1101.
2 lambda      2.61     2.50  0.544  0.395     1.98     3.60   1.01     625.     625.
3 p           0.408    0.413 0.0684 0.0665    0.285    0.513  1.01     626.     623.

だいたい、データを生成した値と近い値が推定されました。

次にマルチスレッドを有効にした場合です。

> fit2$summary()
# A tibble: 3 x 10
  variable       mean     median       sd      mad         q5       q95  rhat ess_bulk ess_tail
  <chr>         <dbl>      <dbl>    <dbl>    <dbl>      <dbl>     <dbl> <dbl>    <dbl>    <dbl>
1 lp__     -2097.     -2097.     0.984    0.726    -2099.      -2.10e+3  1.00    1923.    2214.
2 lambda      62.2       62.2    0.443    0.451       61.5      6.29e+1  1.00    4120.    3060.
3 p            0.0165     0.0165 0.000537 0.000551     0.0157   1.74e-2  1.00    2538.    2468.

結果が変わって、推定値がおかしくなっています。

なぜかは今のところ不明です。


タグ:STAn
nice!(1)  コメント(0) 
共通テーマ:日記・雑感

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント