Example #1
0
def sampler_emcee(D):
    # nlinks: number of iterations for each walker
    # please specify as even
    D['nlinks'] = 100

    # nwalkers: number of interacting chains
    D['nwalkers'] = 200

    # ntemps:
    D['ntemps'] = 5

    # ntune: number of initialization steps to discard
    D['ntune'] = 500

    st = time.time()

    # identify starting positions for chains
    tmp = start_pos(D['ntemps'] * D['nwalkers'], D)
    pos0 = tmp.reshape((D['ntemps'], D['nwalkers'], D['dim']))

    likelihood = D['likelihood']

    # run MCMC for the model of interest
    sampler = PTSampler(ntemps=D['ntemps'],
                        nwalkers=D['nwalkers'],
                        dim=len(D['pname']),
                        logl=likelihood,
                        logp=prior,
                        loglargs=(D, ),
                        logpargs=(D, ))

    for pos, lnprob, lnlike in sampler.sample(pos0, iterations=D['ntune']):
        pass
    burntrace = sampler.chain
    sampler.reset()

    print(burntrace.shape)
    print("burnin completed")

    for pos, lnprob, lnlike in sampler.sample(pos, iterations=D['nlinks']):
        pass
    finaltrace = sampler.chain
    print(finaltrace.shape)

    D['rawtrace'] = np.concatenate((burntrace[0, ...], finaltrace[0, ...]),
                                   axis=1)

    D['sampling_time'] = np.round(time.time() - st, 2)

    st = time.time()

    D['lnZ'], D['dlnZ'] = sampler.thermodynamic_integration_log_evidence()

    elaps = np.round(time.time() - st, 2)
    msg = "model evidence evaluation: " + str(elaps) + " seconds"
    WP(msg, D['wrt_file'])

    return D
Example #2
0
    
# The resulting samples (nsteps/thin of them) are stored as the sampler.chain 
# property:

assert sampler.chain.shape == (ntemps, nwalkers, nsteps/10, ndim)

# Chain must have shape (ntemps, nwalkers, nsteps, ndim)...

# Zero temperature mean:
# mu0 = np.mean(np.mean(sampler.chain[0,...], axis=0), axis=0)

# Longest autocorrelation length (over any temperature)
# max_acl = np.max(sampler.acor)

# Compute the evidence.
# API notes at http://dan.iel.fm/emcee/current/api/#the-parallel-tempered-ensemble-sampler
 
approximation, uncertainty = sampler.thermodynamic_integration_log_evidence()

# Report!

print "Estimated log evidence = ",approximation,"+/-",uncertainty
print " Analytic log evidence = ",log_evidence

# PT burning in for 100 iterations...
# PT sampling for 1000 iterations...
# Estimated log evidence =  -16.9586413385 +/- 7.29507626509
#  Analytic log evidence =  -6.67931612501

# BUG!