如何用pymc 2对两个泊松分布的总和建模?

Stratospark

我正在尝试使用pymc 2建模一个简单的概率编程示例。我一直在与其他语言(例如Church和Anglican)一起玩,并且能够轻松地对此问题进行建模。但是,我似乎无法在Python中弄清楚。

这是英国国教代码,我认为这很不言自明:

[assume a (- (poisson 100) 100)]
[assume b (- (poisson 100) 100)]
[observe (normal (+ a b) .00001) 7]
[predict (list a b)]

使用Metropolis-Hastings采样器,我得到:

   1 (10 1)
   2 (10 8)
9977 (7 0)
  20 (7 1)

使用Particle Gibbs,我得到:

 669 (-1 8)
  71 (-10 17)
  66 (-11 18)
 208 (-12 19)
  19 (-13 20)
  84 (-14 21)
  72 (-15 22)
 441 (-2 9)
...and so on...

我试图像这样在pymc中建模:

def make_model():
    a = (pymc.Poisson("a", 100) - 100)
    b = (pymc.Poisson("b", 100) - 100)

    precision = pymc.Uniform('precision', lower=.0001, upper=1.0)

    @pymc.deterministic
    def mu(a=a, b=b):
        return a+b

    y = pymc.Normal("y", mu=mu, tau=precision, observed=True, value=7)

    return pymc.Model(locals())

def run_mcmc(model):
    mcmc = pymc.MCMC(model)
    mcmc.sample(5000, burn=1000, thin=2)
    return mcmc

result = run_mcmc(make_model())
pymc.Matplot.plot(result)

我正在跟踪a和b在100左右的位置。但是,如果运行(pymc.Poisson("a", 100) - 100).value,我会得到接近0的数字。

我在这里想念什么吗?我对这种可能性感到兴奋,但此刻我很困惑!谢谢你的帮助!

亚伯拉罕·D·弗拉克斯曼

如果我正确理解这一点,那么这是一个很好的例子,可以证明英国国教和PyMC之间在思想上的某些差异。

这是您调整后的PyMC代码的版本,我认为它可以捕获您的意图:

def make_model():
    a = pymc.Poisson("a", 100)  # better to have the stochastics themselves available
    b = pymc.Poisson("b", 100)

    precision = 1e-4**-2 #  Seems like precision is fixed in Anglican model (and different from the meaning of precision in PyMC)

    @pymc.deterministic
    def mu(a=a, b=b):
        return (a-100) + (b-100)

    y = pymc.Normal("y", mu=mu, tau=precision, observed=True, value=7)

    return pymc.Model(locals())

def run_mcmc(model):
    mcmc = pymc.MCMC(model)
    mcmc.use_step_method(pymc.AdaptiveMetropolis, [mcmc.a, mcmc.b])
    mcmc.sample(20000, burn=10000, thin=10)
    return mcmc

result = run_mcmc(make_model())
pymc.Matplot.plot(result)

这是我的代码中的主要区别:

  • a并且b是随机的。当您使用(stochastic - 100)版本中东西时,PyMC会为自己的利益做一些太聪明的事情
  • precision是一个数字,不是随机的,是一个大数字,不是一个小数字。这是因为PyMC在正态分布中使用精度表示1 /方差,但是在英国国教(我认为)中,精度意味着您需要等式运算符接近精度的程度。
  • mcmc使用自适应的Metropolis步进法,具有更长的老化时间。这很重要,因为的关节后部分布ab具有极高的相关性,并且MCMC步骤除非弄清楚了,否则不会走到任何地方。

这是一个IPython Notebook,其中显示了更多细节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何用pymc 2对两个泊松分布的总和建模?

来自分类Dev

如何从两个分布的总和中采样:二项式和泊松

来自分类Dev

如何用泊松分布估计[并绘制]最大似然?

来自分类Dev

R:如何求两个分布的总和?

来自分类Dev

如何使Seaborn符合泊松分布?

来自分类Dev

如何用两个条件计算VLOOKUP的总和?

来自分类Dev

Pyspark,如何使用udf计算泊松分布?

来自分类Dev

如何在 Python 中实现这个 R 泊松分布?

来自分类Dev

如何用标准公式计算两个范围的成对最小值的总和?

来自分类Dev

如何在PyMC中建模3个法线的混合?

来自分类Dev

如何用两个不同的表对两列求和

来自分类Dev

如何建模两个图像之间的映射?(Python,OpenCV)

来自分类Dev

如何用angularjs连接两个包含整数的变量?

来自分类Dev

如何用ffmpeg淡化两个图像

来自分类Dev

如何用CSS突出显示两个文本的区别?

来自分类Dev

如何用两个键绘制地图?C ++

来自分类Dev

如何用两个不同的管理边界绘制ggmap?

来自分类Dev

KonvaJS:如何用箭头连接两个形状?

来自分类Dev

如何用两个元音查找单词

来自分类Dev

如何用外键更新两个表

来自分类Dev

如何用无序的字典断言两个列表?

来自分类Dev

如何用ffmpeg连接两个.aac文件?

来自分类Dev

如何用CSS或JS连接两个背景块?

来自分类Dev

如何用Orderby子句合并两个表?

来自分类Dev

如何用ffmpeg淡化两个图像

来自分类Dev

如何用管道传递两个命令作为参数?

来自分类Dev

如何用条件在两个日期之间计算天数

来自分类Dev

如何用span包装两个动态创建的元素?

来自分类Dev

如何用两个元音查找单词

Related 相关文章

热门标签

归档