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)Loading...
students.group('Year')Loading...
students.where('Year', 'Second').group('Major')Loading...
students.where('Year', 'Third').group('Major')Loading...
32 / (32 + 8)0.8students.pivot('Major', 'Year')Loading...
# Chance of second year, given that they have declared
# P(second year | declared)
30 / (30 + 32)0.4838709677419355# P(third year | declared)
32 / (30 + 32)0.5161290322580645Tree 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)0.689655172413793create_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)