飽きもせずにGibbs Samplingとかばっかりやってますが、久しぶりにはまった。離散確率分布とかからサンプリングするのにrandとかを使ってたんだけど、これがとてもとてもとてもいけなかった。CとかC++のrandは線形合同法で実装されているとかで周期性が問題になる場合があるが、これがとてもとてもとても問題になった。対数尤度を見てるとそれなりに収束したのかなと思ってとあるF値を観察していたんだけど、こんな感じの推移を示した。
ちなみに、これは10個の平均をplotしたものである。平均してこれである。死んでしまえ。
200くらいで周期があるように見うけられたので、(半日くらい経って)boostのメルセンヌツイスターに切り変えてみた。これである。
MCMCするときにrandは使っちゃだめだよっていうのは常識なんですよね、きっと。ようやく身を持って勉強いたしましたまる。