def test_calibrate_highest_outlier_works(self): m = 1 nfreq = 100 seed = 100 freq = np.linspace(1, 10, nfreq) rng = np.random.RandomState(seed) noise = rng.exponential(size=nfreq) model = models.Const1D() model.amplitude = 2.0 p = model(freq) power = noise * p ps = Powerspectrum() ps.freq = freq ps.power = power ps.m = m ps.df = freq[1] - freq[0] ps.norm = "leahy" nsim = 5 loglike = PSDLogLikelihood(ps.freq, ps.power, model, m=1) s_all = np.atleast_2d(np.ones(nsim) * 2.0).T pe = PSDParEst(ps) pval = pe.calibrate_highest_outlier(loglike, [2.0], sample=s_all, max_post=False, seed=seed) assert pval > 0.001
def test_calibrate_highest_outlier_works_with_mvn(self): m = 1 nfreq = 10000 seed = 100 freq = np.linspace(1, 10, nfreq) rng = np.random.RandomState(seed) noise = rng.exponential(size=nfreq) model = models.Const1D() model.amplitude = 2.0 p = model(freq) power = noise * p ps = Powerspectrum() ps.freq = freq ps.power = power ps.m = m ps.df = freq[1] - freq[0] ps.norm = "leahy" nsim = 10 loglike = PSDLogLikelihood(ps.freq, ps.power, model, m=1) pe = PSDParEst(ps) pval = pe.calibrate_highest_outlier(loglike, [2.0], sample=None, max_post=False, seed=seed, nsim=nsim) assert pval > 0.001
def test_calibrate_highest_outlier_works_with_sampling(self): m = 1 nfreq = 100 seed = 100 freq = np.linspace(1, 10, nfreq) rng = np.random.RandomState(seed) noise = rng.exponential(size=nfreq) model = models.Const1D() model.amplitude = 2.0 p = model(freq) power = noise * p ps = Powerspectrum() ps.freq = freq ps.power = power ps.m = m ps.df = freq[1] - freq[0] ps.norm = "leahy" nsim = 5 lpost = PSDPosterior(ps.freq, ps.power, model, m=1) p_amplitude = lambda amplitude: \ scipy.stats.norm(loc=1.0, scale=1.0).pdf( amplitude) priors = {"amplitude": p_amplitude} lpost.logprior = set_logprior(lpost, priors) pe = PSDParEst(ps) with catch_warnings(RuntimeWarning): pval = pe.calibrate_highest_outlier(lpost, [2.0], sample=None, max_post=True, seed=seed, nsim=nsim, niter=10, nwalkers=20, burnin=10) assert pval > 0.001
def test_calibrate_highest_outlier_works_with_sampling(self): m = 1 nfreq = 100000 seed = 100 freq = np.linspace(1, 10, nfreq) rng = np.random.RandomState(seed) noise = rng.exponential(size=nfreq) model = models.Const1D() model.amplitude = 2.0 p = model(freq) power = noise * p ps = Powerspectrum() ps.freq = freq ps.power = power ps.m = m ps.df = freq[1] - freq[0] ps.norm = "leahy" nsim = 10 lpost = PSDPosterior(ps.freq, ps.power, model, m=1) p_amplitude = lambda amplitude: \ scipy.stats.norm(loc=1.0, scale=1.0).pdf( amplitude) priors = {"amplitude": p_amplitude} lpost.logprior = set_logprior(lpost, priors) pe = PSDParEst(ps) pval = pe.calibrate_highest_outlier(lpost, [2.0], sample=None, max_post=True, seed=seed, nsim=nsim, niter=20, nwalkers=100, burnin=100) assert pval > 0.001
priors = {} priors["alpha_0"] = p_alpha priors["amplitude_0"] = p_amplitude priors["amplitude_1"] = p_whitenoise starting_pars = [3.0, 1.0, 2.4] lpost = PSDPosterior(ps.freq, ps.power, plc, priors=priors, m=ps.m) parest = PSDParEst(ps, fitmethod='BFGS', max_post=True) res = parest.fit(lpost, starting_pars) sample = parest.sample(lpost, res.p_opt, cov=res.cov, nwalkers=400, niter=100, burnin=200, namestr="psd_modeling_test") max_power, max_freq, max_ind = parest._compute_highest_outlier(lpost, res) print(max_power) pval = parest.calibrate_highest_outlier(lpost, starting_pars, sample=sample, max_post=True, nsim=100, niter=100, nwalkers=400, burnin=200, namestr="test") print(pval)