def test_TP_scores_better_than_FP(self): """FPs must score lower than TPs""" # make a new reference set with different (lower) priors priors2 = self.priors.copy() priors2["Y:002"] = 0.55 priors2["Y:007"] = 0.15 rs2 = ReferenceSet(dict(null=0.4, refA=0.3, refB=0.3), ids=Yobo.ids(), row_priors=priors2) rs2.add(self.refnull).add(self.refA).add(self.refB) rs2.learn_obo(Yobo) # compare with refA, which has Y:002 equal to 1 FP = Representation(name="FP").set("Y:007", 1) chain_FP = rs2.inference_chain(FP, "refA", verbose=True, fp_penalty=2) chain_FP.evaluate_inference() TP = Representation(name="TP").set("Y:002", 1) chain_TP = rs2.inference_chain(TP, "refA", verbose=True) chain_TP.evaluate_inference() self.assertGreaterEqual(chain_TP.posterior, chain_FP.posterior)
def test_FP_with_fp_penalty(self): """FP increases more with lower fp_penalty""" # make a new reference set with different priors priors2 = self.priors.copy() priors2["Y:003"] = 0.4 priors2["Y:002"] = 0.15 priors2["Y:007"] = 0.1 rs2 = ReferenceSet(dict(null=0.4, ref=0.3), ids=Yobo.ids(), row_priors=priors2) ref = Representation(name="ref") ref.set("Y:001", 1).impute(Yobo, priors2) ref.set("Y:007", priors2["Y:007"] / 2) rs2.add(self.refnull).add(ref) rs2.learn_obo(Yobo) FP = Representation(name="model").set("Y:007", 0.35) chain1 = rs2.inference_chain(FP, "ref", verbose=True, fp_penalty=0.1) chain1.evaluate_inference() self.assertGreater(chain1.posterior, chain1.prior) chain2 = rs2.inference_chain(FP, "ref", verbose=True, fp_penalty=1) chain2.evaluate_inference() self.assertLess(chain2.posterior, chain1.posterior)
def test_FP_can_increase(self): """FP can in principle yield greater score""" # make a new reference set with different priors priors2 = self.priors.copy() priors2["Y:002"] = 0.1 rs2 = ReferenceSet(dict(null=0.4, refA=0.3, refB=0.3), ids=Yobo.ids(), row_priors=priors2) rs2.add(self.refnull).add(self.refA).add(self.refB) rs2.learn_obo(Yobo) FP = Representation(name="model").set("Y:002", 0.2) chain = rs2.inference_chain(FP, "refB", verbose=True, fp_penalty=1) chain.evaluate_inference() self.assertGreater(chain.posterior, chain.prior)
def test_inference_chain(self): """compute an inference chain.""" # create a reference set refA = Representation(name="refA") refA.set("Y:002", 1).impute(Yobo, Ydefaults) refB = Representation(name="refB") refB.set("Y:001", 1).impute(Yobo, Ydefaults) rs = ReferenceSet(dict(refA=0.5, refB=0.5), ids=Yobo.ids(), row_priors=Ydefaults) rs.add(refA).add(refB) rs.learn_obo(Yobo) # compute a chain object explaining scoring steps chain = rs.inference_chain(refA, "refB", verbose=True) self.assertEqual(chain.__dict__["model"], "refA") self.assertEqual(chain.__dict__["reference"], "refB") self.assertGreater(len(chain.data), 2, "data chain should describe multiple features") self.assertTrue("background" in chain.data[0].__dict__, "chain data have comparison information") self.assertTrue("result" in chain.data[0].__dict__, "chain data have TP/FP/etc codes")