将pymc2代码移植到pymc3:自定义似然函数

老君鹏

我正在尝试实现Lee&Wagenmakers的书中的经过审查的数据示例(第5.5章,第70页)。在pymc2中,我有以下模型:

nattempts = 950   
nfails = 949   
n = 50    # Number of questions
y = np.zeros(nattempts)
y[nattempts-1] = 1
z = 30
unobsmin = 15
unobsmax = 25
unobsrange = np.arange(unobsmin,unobsmax+1)

theta = pymc.Uniform("theta",lower = .25, upper = 1)

@pymc.observed
def Ylike(value=z, theta = theta, n=n, censorn=nfails, unobs=unobsrange):
    ylikeobs = pymc.binomial_like(x=value, n=n, p=theta)
    ylikeunobs = np.array([])
    for i in unobs:
        ylikeunobs = np.append(pymc.binomial_like(x=i, n=n, p=theta),ylikeunobs)
    return ylikeobs+sum(ylikeunobs)*censorn

testmodel = pymc.Model([theta,Ylike])
mcmc = pymc.MCMC(testmodel)
mcmc.sample(iter = 20000, burn = 50, thin = 2)

其中涉及到装饰工@pymc.observed
我想我需要使用来表达可能性pm.DensityDist,但是我不知道该怎么做。

老君鹏

好的,我知道了怎么做:

with pm.Model():
    theta = pm.Uniform("theta",lower = .25, upper = 1)
    def logp(value,n,p):
        return pm.dist_math.bound(
        pm.dist_math.binomln(n, value) 
      + pm.dist_math.logpow(p, value) 
      + pm.dist_math.logpow(1 - p, n - value),
        0 <= value, value <= n,
        0 <= p, p <= 1)
    def Censorlike(value=z, n=n, censorn=nfails, unobs=unobsrange):
        ylikeobs = logp(value=value, n=n, p=theta)
        ylikeunobs = 0
        for i in unobs:
            ylikeunobs += logp(value=i, n=n, p=theta)
        return ylikeobs+ylikeunobs*censorn

    ylike = pm.DensityDist('ylike', Censorlike, observed={'value':z,'n':n,'censorn':nfails,'unobs':unobsrange})
    trace = pm.sample(3e3)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将pyMC2贝叶斯A / B测试示例移植到pyMC3

来自分类Dev

处理pymc3中的实际假设-将示例从ThinkBayes移植到pymc3

来自分类Dev

将混合物模型移植到pymc3

来自分类Dev

涉及离散变量时pymc3与pymc2的难点

来自分类Dev

涉及离散变量时pymc3与pymc2的难点

来自分类Dev

如何在PyMC3中定义自定义优先级

来自分类Dev

如何在PyMC3中定义自定义优先级

来自分类Dev

将python 2代码移植到python 3:ICMP扫描时出现错误

来自分类Dev

如何使用theano.op在pymc3中编写自定义确定性或随机性?

来自分类Dev

将Python 2代码移植到Python 3时处理ctypes和ASCII字符串

来自分类Dev

将Python 2代码移植到Python 3时处理ctypes和ASCII字符串

来自分类Dev

将Java 8代码移植到Java 7

来自分类Dev

statsmodels与pymc中的对数似然

来自分类Dev

pymc3的优化错误

来自分类Dev

pymc3的优化错误

来自分类Dev

pymc3:使用 NUTS

来自分类Dev

实体框架6代码优先自定义函数

来自分类Dev

在PyMC3中恢复正弦函数参数

来自分类Dev

如何在PyMC中将自定义函数应用于变量?

来自分类Dev

如何在PyMC中将自定义函数应用于变量?

来自分类Dev

PyMC3和Theano-pymc3导入后,起作用的Theano代码停止工作

来自分类Dev

PyMC3中的模型比较

来自分类Dev

使用PYMC3进行回归

来自分类Dev

pymc3:多个观察值

来自分类Dev

PyMC3高斯混合模型

来自分类Dev

PyMC3:对相同输入的不同预测

来自分类Dev

使用PYMC3对RV求和

来自分类Dev

pymc3 Heaviside步进功能

来自分类Dev

Pymc3中的分类混合模型