def get_overall_best_fit(self, pars, **specargs): """Returns the overall best-fit, the chi-square and the N.d.o.f.""" if type(pars) == str: pars = [pars] for s, v in enumerate(self.p.get("data_vectors")): d = DataManager(self.p, v, self.cosmo, all_data=False) self.d = d lik = Likelihood(self.p.get('params'), d.data_vector, d.covar, self._th, template=d.templates) sam = Sampler(lik.lnprob, lik.p0, lik.p_free_names, self.p.get_sampler_prefix(v['name']), self.p.get('mcmc')) sam.get_chain() sam.update_p0(sam.chain[np.argmax(sam.probs)]) kwargs = lik.build_kwargs(sam.p0) w = kwargs["width"] zz, NN = self._get_dndz(d.tracers[0][0].dndz, w) zmean = np.average(zz, weights=NN) kwargs["z"] = zmean kwargs["chi2"] = lik.chi2(sam.p0) all_pars = self.p.p.get("params") dof = np.sum( [param["vary"] for param in all_pars if "vary" in param]) kwargs["dof"] = len(lik.dv) - dof kwargs["PTE"] = 1 - chi2.cdf(kwargs["chi2"], kwargs["dof"]) if s == 0: keys = ["z", "chi2", "dof", "PTE"] + pars OV_BF = {k: kwargs[k] for k in keys} else: for k in keys: OV_BF[k] = np.vstack((OV_BF[k], kwargs[k])) return OV_BF
save_figure=True, prefix=p.get_sampler_prefix(v['name'])) print(" Best-fit parameters:") pars = [] for i, nn, in enumerate(sam.parnames): CHAIN = sam.chain[:, i] vmin, vv, vmax = np.percentile(CHAIN, [16, 50, 84]) pars.append(vv) errmin, errmax = vv-vmin, vmax-vv print(" " + nn + " : %.3lE +/- (%.3lE %.3lE)" % (vv, errmax, errmin)) if nn == 'b_hydro': bmeans.append(vv) # median sbmeans[0].append(errmin) # min errorbar sbmeans[1].append(errmax) # max errorbar chain = sam.chain pars.append(lik.chi2(sam.p0)) pars.append(len(d.data_vector)) np.save(p.get_outdir() + "best_fit_params_" + run_name + "_" +v["name"]+".npy", np.array(pars)) print(" chi^2 = %lf" % (lik.chi2(sam.p0))) print(" n_data = %d" % (len(d.data_vector))) # print(" b_g = %.3lE +/- (%.3lE %.3lE) " % (bg, bg-bgmin, bgmax-bg)) # print(" b_y = %.3lE +/- (%.3lE %.3lE) " % (by, by-bymin, bymax-by)) fig, ax = plt.subplots() ax.errorbar(zmeans, 1-np.array(bmeans), yerr=np.flip(sbmeans, 0), fmt='ro') ax.set_xlabel('$z$', fontsize=15) ax.set_ylabel('$1-b$', fontsize=15) fig.savefig(p.get_sampler_prefix('b_hydro')+'all.pdf', bbox_inches='tight')
th, template=d.templates, debug=p.get('mcmc')['debug']) # Set up sampler p0 = p.get_map_p0(lik.p_free_names) # p0 for particular map sam = Sampler(lik.lnprob, p0, lik.p_free_names, p.get_sampler_prefix(v['name']), p.get('mcmc')) # print(dict(zip(lik.p_free_names, p0))) # print("chisq:", lik.chi2(p0)) # exit(1) # Compute best fit and covariance if not sam.read_properties(): print(" Computing best-fit and covariance") sam.get_best_fit(update_p0=True) cov0 = sam.get_covariance(update_cov=True) sam.save_properties() print(" Best-fit parameters:") for n, val, s in zip(sam.parnames, sam.p0, np.sqrt(np.diag(sam.covar))): print(" " + n + " : %.3lE +- %.3lE" % (val, s)) print(" chi^2 = %lf" % (lik.chi2(sam.p0))) print(" n_data = %d" % (len(d.data_vector))) if sam.nsteps > 0: print(" Sampling:") sam.sample(carry_on=p.get('mcmc')['continue_mcmc'], verbosity=1, use_mpi=args.no_mpi)
hm_correction=hm_correction, selection=sel, **pars) # Set up likelihood lik = Likelihood(p.get('params'), d.data_vector, d.covar, th, template=d.templates, debug=p.get('mcmc')['debug']) p0 = extract_map_p0(p, v, lik.p_free_names) # p0 for particular map # Benchmarks print(dict(zip(lik.p_free_names, p0))) print("chisq:", lik.chi2(p0)) exit(1) # Set up sampler sam = Sampler(lik.lnprob, lik.p0, lik.p_free_names, p.get_sampler_prefix(v['name']), p.get('mcmc')) # Benchmarks # print(dict(zip(lik.p_free_names, lik.p0))) # print("chisq:", lik.chi2(lik.p0)) # Compute best fit and covariance around it if not sam.read_properties(): print(" Computing best-fit and covariance") sam.get_best_fit(update_p0=True) cov0 = sam.get_covariance(update_cov=True) sam.save_properties()
indd = unequal_enumerate(lsd) tvd = eval_and_unwrap(params, thd.th, indd) tv1hd = eval_and_unwrap(params, thd.th1h, indd) tv2hd = eval_and_unwrap(params, thd.th2h, indd) indg = unequal_enumerate(lsg) tvg = eval_and_unwrap(params, thg.th, indg) tv1hg = eval_and_unwrap(params, thg.th1h, indg) tv2hg = eval_and_unwrap(params, thg.th2h, indg) # Reshape data vector dv = unwrap(likg.dv, indg) # Compute error bars and reshape ev = unwrap(np.sqrt(np.diag(likg.cv)), indg) # Compute chi^2 chi2 = likd.chi2(sam.p0) dof = len(likd.dv) for i in range(2): # set-up subplot gs = GridSpecFromSubplotSpec(2, 1, subplot_spec=gs_main[s, i], height_ratios=[3, 1], hspace=0) ax1 = f.add_subplot(gs[0]) ax2 = f.add_subplot(gs[1]) # Create mask lmin = v["twopoints"][i]["lmin"]
for nam, val, sig in zip(sam.parnames, sam.p0, np.sqrt(np.diag(sam.covar))): param_jk_values[nam] = val print(" " + nam + " : %.3lE +- %.3lE" % (val, sig)) if nam == p.get("mcmc")["save_par"]: par.append(val) z, nz = np.loadtxt(d.tracers[0][0].dndz, unpack=True) zmean = np.average(z, weights=nz) sigz = np.sqrt(np.sum(nz * (z - zmean)**2) / np.sum(nz)) zarr = np.linspace(zmean - sigz, zmean + sigz, 10) bg = np.mean( hm_bias(cosmo, 1. / (1 + zarr), d.tracers[0][0].profile, **(lik.build_kwargs(sam.p0)))) by = np.mean( hm_bias(cosmo, 1. / (1 + zarr), d.tracers[1][1].profile, **(lik.build_kwargs(sam.p0)))) chi2 = lik.chi2(sam.p0) print(" b_g : %.3lE" % bg) print(" b_y : %.3lE" % by) print(" chi^2 = %lf" % chi2) print(" n_data = %d" % (len(d.data_vector))) param_jk_values['b_g'] = bg param_jk_values['b_y'] = by param_jk_values['chi2'] = chi2 np.savez(p.get_sampler_prefix(v['name']) + "jk%d_vals" % jk_region, M1=np.array(param_jk_values['M1']), Mmin=np.array(param_jk_values['Mmin']), b_hydro=np.array(param_jk_values['b_hydro']), r_corr=np.array(param_jk_values['r_corr']), width=np.array(param_jk_values['width']), b_g=np.array(param_jk_values['b_g']),