PyMC中单个薄荷实例的多个硬币

时间:2015-03-09 22:18:02

标签: bayesian pymc

尝试通过转移书中的一些模型来学习PyMC"做贝叶斯数据分析" (Kruschke)。一个基本的例子(来自第9章)假设根据p~Bern(theta)分配一组硬币,其中theta来自Beta分布(" mint"),具有固定参数。以下是我编写代码的方法(在PyMC2中):

import pymc as pm
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sbn
from pymc.Matplot import plot as mcplot

from pymc import Bernoulli, Beta, Gamma

flips = [[True, False, False, False],
         [False, False, False, True],
         [True, False, False, False],
         [False, False, False, False]]

mint = Beta('mint', alpha=2, beta=2)

coin0 = Bernoulli('coin0', p=mint, value=flips[0], observed=True)
coin1 = Bernoulli('coin1', p=mint, value=flips[1], observed=True)
coin2 = Bernoulli('coin2', p=mint, value=flips[2], observed=True)
coin3 = Bernoulli('coin3', p=mint, value=flips[3], observed=True)

mcmc = pm.MCMC([mint, coin0, coin1, coin2, coin3])
mcmc.sample(iter=10000, burn=1000)

mcmc.summary()
mint:

    Mean             SD               MC Error        95% HPD interval
    ------------------------------------------------------------------
    [[ 0.253]]       [[ 0.096]]       [[ 0.002]]       [ 0.074  0.439]


    Posterior quantiles:

    2.5             25              50              75             97.5
     |---------------|===============|===============|---------------|
    [[ 0.089]]       [[ 0.183]]      [[ 0.242]]     [[ 0.318]]    [[ 0.46]]

这似乎有效,但我想知道的是如何获得每枚硬币的theta值?我假设应该从每个硬币的后验分布中产生样本?

1 个答案:

答案 0 :(得分:3)

不确定theta的含义,因为模型中没有theta。你指的是特定于硬币的概率(这里用mint表示)?您已为所有硬币指定了单个概率,而不是4个概率。尝试将mint参数修改为:

mint = Beta('mint', alpha=2, beta=2, size=4)

将指定大小为4的向量值随机数。