【问题标题】:goodness of fit in pymc and plotting discrepanciespymc 中的拟合优度和绘图差异
【发布时间】:2015-06-09 12:10:40
【问题描述】:

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

  1. x:数据
  2. x_sim:后验分布样本
  3. x_exp:预期值 前两个我能看懂,第三个看不懂

这是代码

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 )

只绘制了数组最后一个条目的图 我怎样才能为每个条目绘制一个情节?

感谢大家的帮助

【问题讨论】:

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


    【解决方案1】:

    如果您使用的是内置随机变量,则有 expval 函数是该分布的预期值(在二项式的情况下,函数只是 binomial_expval,也就是 p*n)。

    一般来说,我建议使用gof_plot 来生成后验预测图,而不是discrepancy_plot。您的代码存在一些问题:

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

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

      mc=pymc.MCMC([serobservation,pobservation,prob])
      

    通过这些更改,我得到了 8 个 GOF 图,每个数据一个。 Here is a zip file 包含我得到的地块。

    【讨论】:

    • 对此我还是有点困惑。你怎么称呼expval?你把pobservation的痕迹传给它了吗?
    • PyMC 中的每个分布(随机节点)都有一个expval 方法。我们可能应该让函数自动提取它。请记住,got_plot 不需要这个,只有discrepancy_plot 需要。
    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2014-10-10
    • 2022-08-20
    • 2020-09-02
    • 2014-03-07
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多