首页 > 解决方案 > 如何实施联合超先验?

问题描述

我正在尝试重新创建贝叶斯数据分析第三版的结果。

第 5 章第 3 节涉及大鼠的肿瘤。分层模型是合适的,并且使用的超先验不是 pymc3 中包含的密度之一。

超先验是a*b*(a+b)^-2.5。这是我使用 pymc3 的尝试。

import pymc3 as pm
with pm.Model() as model:

    def ab_dist(x):
        #Should be log density, from what I have read
        a = x[0]
        b = x[1]
        return a+b-5/2*(a+b)

    ab = pm.DensityDist('ab', ab_dist, shape = 2, testval=[2,2])

    a = ab[0]
    b = ab[1]

    theta = pm.Beta('theta',alpha = a,beta = b)

    Y= pm.Binomial('y', n = n, p = theta, observed = y)

在这个阶段,我返回了一个错误

ValueError: Input dimension mis-match. (input[0].shape[0] = 71, input[1].shape[0] = 20000)

我做错了什么?我是否正确实施了密度?

标签: pymc3

解决方案


推荐阅读