from datascience import *
import numpy as np
import matplotlib
%matplotlib inline
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')
def bayes_rule(pr_a, pr_b_given_a, pr_b_given_not_a):
    """
    Bayes' Rule
    P(A | B) = P(A)P(B|A) / P(B)
    
    To Compute P(B)
        P(B) = P(B, A) + P(B, Not A) 
             = P(A)P(B|A) + P(Not A)P(B | Not A)
    """
    prb_b = pr_a * pr_b_given_a + (1-pr_a) * pr_b_given_not_a
    return pr_a * pr_b_given_a / prb_b
pr_disease = 1/1000
pr_pos_given_disease = 0.99
pr_pos_given_no_disease = 0.05
bayes_rule(pr_disease, pr_pos_given_disease, pr_pos_given_no_disease)
0.019434628975265017
pr_disease = 0.1
pr_pos_given_disease = 0.99
pr_pos_given_no_disease = 0.05
bayes_rule(pr_disease, pr_pos_given_disease, pr_pos_given_no_disease)
0.6875
pr_disease = np.arange(1,999)/1000
pr_pos_given_disease = 0.99
pr_pos_given_no_disease = 0.05
post = bayes_rule(pr_disease, pr_pos_given_disease, pr_pos_given_no_disease)
Table().with_columns(
    "Prior Pr(Disease)", pr_disease, 
    "Posterior Pr(Disease | Pos. Test)", post).iplot("Prior Pr(Disease)")