Highest Posterior Density Region and Central Credible Region

前端 未结 7 1024
情深已故
情深已故 2021-01-31 09:36

Given a posterior p(Θ|D) over some parameters Θ, one can define the following:

Highest Posterior Density Region:

The Highest Posterior Density Region

7条回答
  •  野趣味
    野趣味 (楼主)
    2021-01-31 10:04

    PyMC has a built in function for computing the hpd. In v2.3 it's in utils. See the source here. As an example of a linear model and it's HPD

    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))
    

    You may also consider calculating the quantiles

    print(linear_output['m']['quantiles'])
    print(linear_output['c']['quantiles'])
    

    where I think if you just take the 2.5% to 97.5% values you get your 95% central credible interval.

提交回复
热议问题