
15.3
階層的な版
■
183
15.3
階層的な版
問題の単純版を解いて、あらかじめ存在する種の数がわかっていれば、それぞれの
占有率を推定できることを示した。
ここで、元の問題、種の全数を推定する問題に戻ろう。この問題を解くために、仮
説として他のスイートを含むメタスイートを定義する。この場合、最上位のスイートは、
種の個数についての仮説を含み、最下位では、占有率についての仮説を含む。
クラス定義は次のようになる。
class Species(thinkbayes.Suite):
def
__
init
__
(self, ns):
hypos = [thinkbayes.Dirichlet(n) for n in ns]
thinkbayes.Suite.
__
init
__
(self, hypos)
__
init
__
は、
n
の可能値のリストを取り、
Dirichlet
オブジェクトのリストを作る。
最上位のスイートを作るコードは次のようになる。
ns = range(3, 30)
suite = Species(ns)
ns
は、
n
の取り得る値のリストである。
3
つの種の場合は確認したので、少なくとも
3
以上の数でならなければならない。妥当な上限を私は選んだが、この上限を超える確
率は低いことを後で確認する。少なくとも最初は、この範囲内のどの値も同じ程度の可
能性と仮定する。
階層的モデルの更新では、すべての階層を更新する必要がある。普通は、最下位の
レベルをまず更新し、上の階層に進むのだが、この場合には、最上位を最初 ...