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
コメント 0