Skip to content
Snippets Groups Projects

Add a mean-log-likelihood method to improve the ACT estimation

Merged Gregory Ashton requested to merge add-mean-log-like-to-ptemcee into master
All threads resolved!
Compare and Show latest version
1 file
+ 39
3
Compare changes
  • Side-by-side
  • Inline
@@ -227,6 +227,17 @@ class Ptemcee(MCMCSampler):
self.store_walkers = store_walkers
self.pos0 = pos0
self._periodic = [
self.priors[key].boundary == "periodic" for key in self.search_parameter_keys
]
self.priors.sample()
self._minima = np.array([
self.priors[key].minimum for key in self.search_parameter_keys
])
self._range = np.array([
self.priors[key].maximum for key in self.search_parameter_keys
]) - self._minima
@property
def sampler_function_kwargs(self):
""" Kwargs passed to samper.sampler() """
@@ -448,7 +459,10 @@ class Ptemcee(MCMCSampler):
self.pos0, storechain=False,
iterations=self.convergence_inputs.niterations_per_check,
**self.sampler_function_kwargs):
pass
pos0[:, :, self._periodic] = np.mod(
pos0[:, :, self._periodic] - self._minima[self._periodic],
self._range[self._periodic]
) + self._minima[self._periodic]
if self.iteration == self.chain_array.shape[1]:
self.chain_array = np.concatenate((
@@ -706,7 +720,6 @@ def check_iteration(
thin = int(np.max([1, ci.thin_by_nact * tau_int]))
samples_per_check = nwalkers / thin
nsamples_effective = int(nwalkers * (nsteps - nburn) / thin)
print(nwalkers, iteration, nsteps, nburn, thin, nsamples_effective)
# Calculate convergence boolean
converged = Q < ci.Q_tol and ci.nsamples < nsamples_effective
@@ -719,7 +732,7 @@ def check_iteration(
check_taus = np.array(tau_list[lower_tau_index :])
if not np.any(np.isnan(check_taus)) and check_taus.shape[0] > GRAD_WINDOW_LENGTH:
gradient_tau = get_max_gradient(
check_taus, axis=0, window_length=GRAD_WINDOW_LENGTH)
check_taus, axis=0, window_length=11)
if gradient_tau < ci.gradient_tau:
logger.debug("tau usable as {} < gradient_tau={}"
@@ -1090,6 +1103,29 @@ class LikePriorEvaluator(object):
def __init__(self, search_parameter_keys, use_ratio=False):
self.search_parameter_keys = search_parameter_keys
self.use_ratio = use_ratio
self.periodic_set = False
def _setup_periodic(self):
self._periodic = [
priors[key].boundary == "periodic" for key in self.search_parameter_keys
]
priors.sample()
self._minima = np.array([
priors[key].minimum for key in self.search_parameter_keys
])
self._range = np.array([
priors[key].maximum for key in self.search_parameter_keys
]) - self._minima
self.periodic_set = True
def _wrap_periodic(self, array):
if not self.periodic_set:
self._setup_periodic()
array[self._periodic] = np.mod(
array[self._periodic] - self._minima[self._periodic],
self._range[self._periodic]
) + self._minima[self._periodic]
return array
def logl(self, v_array):
parameters = {key: v for key, v in zip(self.search_parameter_keys, v_array)}
Loading