我用PyMC编写了以下程序:
import pymc
from pymc.Matplot import plot as mcplot
def testit( passed, test_p = 0.8, alpha = 5, beta = 2):
Pi = pymc.Beta( 'Pi', alpha=alpha, beta=beta)
Tj = pymc.Bernoulli( 'Tj', p=test_p)
@pymc.deterministic
def flipper( Pi=Pi, Tj=Tj):
return Pi if Tj else (1-Pi)
# Pij = Pi if Tj else (1-Pi)
# return pymc.Bernoulli( 'Rij', Pij)
Rij = pymc.Bernoulli( 'Rij', p=flipper, value=passed, observed=True)
model = pymc.MCMC( [ Pi, Tj, flipper, Rij])
model.sample(iter=10000, burn=1000, thin=10)
mcplot(model)
testit( 1.)
它似乎工作正常,但我想从后验分布中提取参数。我如何从Tj
得到后面的p
,从Pi
得到{beta
?在
你很亲密。如果您稍微重构一下,使Pi和Tj对象位于函数之外,您可以直接从(近似)后验分布访问MCMC样本:
然后,你可以用}方法检查}的边缘后验分布:
^{pr2}$.trace()
和{Ti
和{相关问题 更多 >
编程相关推荐