<p>PyMC有一个用于计算hpd的内置函数。在2.3版本中是在utils中。请参阅源<a href="https://github.com/pymc-devs/pymc/blob/2.3/pymc/utils.py" rel="noreferrer">here</a>。作为线性模型的一个例子,它是HPD</p>
<pre><code>import pymc as pc
import numpy as np
import matplotlib.pyplot as plt
## data
np.random.seed(1)
x = np.array(range(0,50))
y = np.random.uniform(low=0.0, high=40.0, size=50)
y = 2*x+y
## plt.scatter(x,y)
## priors
emm = pc.Uniform('m', -100.0, 100.0, value=0)
cee = pc.Uniform('c', -100.0, 100.0, value=0)
#linear-model
@pc.deterministic(plot=False)
def lin_mod(x=x, cee=cee, emm=emm):
return emm*x + cee
#likelihood
llhy = pc.Normal('y', mu=lin_mod, tau=1.0/(10.0**2), value=y, observed=True)
linearModel = pc.Model( [llhy, lin_mod, emm, cee] )
MCMClinear = pc.MCMC( linearModel)
MCMClinear.sample(10000,burn=5000,thin=5)
linear_output=MCMClinear.stats()
## pc.Matplot.plot(MCMClinear)
## print HPD using the trace of each parameter
print(pc.utils.hpd(MCMClinear.trace('m')[:] , 1.- 0.95))
print(pc.utils.hpd(MCMClinear.trace('c')[:] , 1.- 0.95))
</code></pre>
<p>你也可以考虑计算分位数</p>
<pre><code>print(linear_output['m']['quantiles'])
print(linear_output['c']['quantiles'])
</code></pre>
<p>我认为只要取2.5%到97.5%的值,就得到95%的中心可信区间。</p>