def test_compute_lrt_fails_when_garbage_goes_in(self): pe = PSDParEst(self.ps) t0 = [2.0, 1, 1, 1] with pytest.raises(TypeError): pe.compute_lrt(self.lpost, t0, None, t0) with pytest.raises(ValueError): pe.compute_lrt(self.lpost, t0[:-1], self.lpost, t0)
def test_compute_lrt_sets_max_post_to_false(self): t0 = [2.0, 1, 1, 1] pe = PSDParEst(self.ps, max_post=True) assert pe.max_post is True delta_deviance = pe.compute_lrt(self.lpost, t0, self.lpost, t0) assert pe.max_post is False
def test_compute_lrt_sets_max_post_to_false(self): t0 = [2.0, 1, 1, 1] pe = PSDParEst(self.ps, max_post=True) assert pe.max_post is True delta_deviance, _, _ = pe.compute_lrt(self.lpost, t0, self.lpost, t0) assert pe.max_post is False
def test_compute_lrt_works(self): t0 = [2.0, 1, 1, 1] pe = PSDParEst(self.ps, max_post=True) assert pe.max_post is True delta_deviance, _, _ = pe.compute_lrt(self.lpost, t0, self.lpost, t0) assert pe.max_post is False assert np.absolute(delta_deviance) < 1.5e-4
def test_compute_lrt_computes_deviance_correctly(self): t0 = [2.0, 1, 1, 1] pe = PSDParEst(self.ps, max_post=True) # MB: This is a little too random delta_deviance = pe.compute_lrt(self.lpost, t0, self.lpost, t0) assert np.absolute(delta_deviance) < 1.5e-4
def test_compute_lrt_computes_deviance_correctly(self): t0 = [2.0, 1, 1, 1] pe = PSDParEst(self.ps, max_post=True) # MB: This is a little too random delta_deviance, _, _ = pe.compute_lrt(self.lpost, t0, self.lpost, t0) assert np.absolute(delta_deviance) < 1.5e-4
def test_compute_lrt_works(self): m = 1 nfreq = 100000 freq = np.linspace(1, 10, nfreq) rng = np.random.RandomState(100) 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" loglike = PSDLogLikelihood(ps.freq, ps.power, model, m=1) loglike = PSDLogLikelihood(ps.freq, ps.power, model, m=1) s_all = np.atleast_2d(np.ones(10) * 2.0).T model2 = models.PowerLaw1D() + models.Const1D() model2.x_0_0.fixed = True loglike2 = PSDLogLikelihood(ps.freq, ps.power, model2, 1) pe = PSDParEst(ps) lrt_obs, res1, res2 = pe.compute_lrt(loglike, [2.0], loglike2, [2.0, 1.0, 2.0], neg=True) lrt_sim = pe.simulate_lrts(s_all, loglike, [2.0], loglike2, [2.0, 1.0, 2.0], max_post=False, seed=100) assert (lrt_obs > 0.4) and (lrt_obs < 0.6) assert np.all(lrt_sim < 10.0) and np.all(lrt_sim > 0.01)
def test_compute_lrt_works(self): m = 1 nfreq = 100000 freq = np.linspace(1, 10, nfreq) rng = np.random.RandomState(100) 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" loglike = PSDLogLikelihood(ps.freq, ps.power, model, m=1) s_all = np.atleast_2d(np.ones(10) * 2.0).T model2 = models.PowerLaw1D() + models.Const1D() model2.x_0_0.fixed = True loglike2 = PSDLogLikelihood(ps.freq, ps.power, model2, 1) pe = PSDParEst(ps) lrt_obs, res1, res2 = pe.compute_lrt(loglike, [2.0], loglike2, [2.0, 1.0, 2.0], neg=True) lrt_sim = pe.simulate_lrts(s_all, loglike, [2.0], loglike2, [2.0, 1.0, 2.0], seed=100) assert (lrt_obs > 0.4) and (lrt_obs < 0.6) assert np.all(lrt_sim < 10.0) and np.all(lrt_sim > 0.01)