// AIMA3e pg. 496
protected void test_MeningitisStiffNeckModel(ProbabilityModel model)
{
Assert.IsTrue(model.isValid());
AssignmentProposition ameningitis = new AssignmentProposition(
ExampleRV.MENINGITIS_RV, true);
AssignmentProposition anotmeningitis = new AssignmentProposition(
ExampleRV.MENINGITIS_RV, false);
AssignmentProposition astiffNeck = new AssignmentProposition(
ExampleRV.STIFF_NECK_RV, true);
AssignmentProposition anotstiffNeck = new AssignmentProposition(
ExampleRV.STIFF_NECK_RV, false);
// P(stiffNeck | meningitis) = 0.7
Assert.AreEqual(0.7, model.posterior(astiffNeck, ameningitis),
DELTA_THRESHOLD);
// P(meningitis) = 1/50000
Assert.AreEqual(0.00002, model.prior(ameningitis), DELTA_THRESHOLD);
// P(~meningitis) = 1-1/50000
Assert.AreEqual(0.99998, model.prior(anotmeningitis),
DELTA_THRESHOLD);
// P(stiffNeck) = 0.01
Assert.AreEqual(0.01, model.prior(astiffNeck), DELTA_THRESHOLD);
// P(~stiffNeck) = 0.99
Assert.AreEqual(0.99, model.prior(anotstiffNeck), DELTA_THRESHOLD);
// P(meningitis | stiffneck)
// = P(stiffneck | meningitis)P(meningitis)/P(stiffneck)
// = (0.7 * 0.00002)/0.01
// = 0.0014 (13.4)
Assert.AreEqual(0.0014, model.posterior(ameningitis, astiffNeck),
DELTA_THRESHOLD);
// Assuming P(~stiffneck | meningitis) = 0.3 (pg. 497), i.e. CPT (row
// must = 1)
//
// P(meningitis | ~stiffneck)
// = P(~stiffneck | meningitis)P(meningitis)/P(~stiffneck)
// = (0.3 * 0.00002)/0.99
// = 0.000006060606
Assert.AreEqual(0.000006060606,
model.posterior(ameningitis, anotstiffNeck), DELTA_THRESHOLD);
}