pymc中的拟合优度和绘制差异

时间:2015-06-09 12:10:40

标签: python-2.7 pymc goodness-of-fit

我正在使用PYMC 2.3.4。我发现太棒了。现在,我想对文档的第7.3节(https://pymc-devs.github.io/pymc/modelchecking.html)中显示的拟合和绘图效果做一些好处。 在文档中,他们说您需要3个输入用于差异图

  1. x:数据
  2. x_sim:后验分布样本
  3. x_exp:期望值 我能理解前两个而不是第三个
  4. 这个代码

    Sero=[0,1,4,2,2,7,13,17,90]
    
    Pop=[ 15,145,170,132,107,57,68,57,251]
    
    for i in range(len(Pop)):
       prob[i] = pymc.Uniform(`prob_%i' % i, 0,1.0)
    
    serobservation=pymc.Binomial('serobservation',n=Pop,p=prob,value=Sero,observed=True)
    pobservation=pymc.Binomial('pobservation',n=Pop,p=prob)
    mod=pymc.Model([serobservation,pobservation,prob])
    mc=pymc.MCMC(mod)
    mc.sample(20000)
    

    一切正常,然后我尝试绘制差异,但我不知道要放什么作为预期值你能帮忙吗? 到现在为止我已经这样做了:

    D = pymc.discrepancy( Sero,pobservation,serobservation)
    pymc.Matplot.discrepancy_plot(D, name='D', report_p=True)
    

    但我有错误

    AttributeError: 'Binomial' object has no attribute 'trace'
    

    我该怎么办?能否请您提供一个关于如何创建预期值的虚拟示例? 当我使用函数

    pymc.Matplot.gof_plot(pobservation,Sero )
    

    仅完成数组最后一个条目的绘图 我怎样才能为每个条目制作一个情节?

    感谢您的帮助

1 个答案:

答案 0 :(得分:2)

如果您正在使用内置随机指标,则expval函数是该分布的期望值(在二项式的情况下,函数只是binomial_expval,这只是{ {1}})。

一般情况下,我建议使用p*n来生成后验预测图,而不是gof_plot。您的代码存在一些问题:

  1. 不清楚为什么要构建discrepancy_plot个节点列表,而不仅仅是指定一个向量值prob

    Uniform
  2. 您永远不需要直接实例化prob = pymc.Uniform('prob', 0, 1, size=len(Pop)) ;只需Model

    MCMC
  3. 通过这些更改,我得到8个GOF图,每个数据一个。 Here is a zip file包含我得到的情节。