from datascience import *
import numpy as np
import matplotlib
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')
import warnings
warnings.simplefilter("ignore")# np.array(list) converts list to an array
# provided all the elements of list are of the same type
n = 100
second = round(n * 0.6)
third = round(n * 0.4)
year = np.array(['Second'] * second + ['Third'] * third)
major = np.array(['Declared'] * (round(second * 0.5)) + ['Undeclared'] * (round(second * 0.5)) + \
['Declared'] * (round(third * 0.8)) + ['Undeclared'] * (round(third * 0.2)))
students = Table().with_columns(
'Year', year,
'Major', major
)def create_population(prior_disease_prob, n):
disease = round(n * prior_disease_prob)
no_disease = round(n * (1 - prior_disease_prob))
status = np.array(['Disease'] * disease + ['No disease'] * no_disease)
result = np.array(['Test +'] * (disease) + ['Test +'] * (round(no_disease * 0.05)) + \
['Test -'] * (round(no_disease * 0.95)))
t = Table().with_columns(
'Status', status,
'Test Result', result
)
return t.pivot('Test Result', 'Status')More Likely Than Not¶
students.show(3)students.pivot('Major', 'Year')# Verify: 60% of students are Second years, 40% are Third years
60 / (60 + 40)# Verify: 50% of Second years have Declared
30 / 60# Verify: 80% of Third years have Declared
32 / 40# Chance of second year, given that they have declared
# P(second year | declared)
30 / 62# P(third year | declared)
32 / 62Tree Diagram Calculation¶
# P(second year | declared), from tree diagram
(0.6 * 0.5) / (0.6 * 0.5 + 0.4 * 0.8)Decisions¶
create_population(1/1000, 10000)10 / 510# P(disease | tested +)
# = P(disease & tested +) / P(tested +)
# if prior probability of disease is 1/10
(0.1 * 1) / (0.1*1 + 0.9*0.05)create_population(1/10, 10000)# P(disease | tested +)
# if prior probability of disease is 0.5
(0.5 * 1) / (0.5*1 + 0.5*0.05)create_population(1/2, 10000)