-
Notifications
You must be signed in to change notification settings - Fork 0
/
howto_apply_bayes_quickly.py
37 lines (27 loc) · 1.03 KB
/
howto_apply_bayes_quickly.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
"""Reference: https://youtu.be/HZGCoVF3YvM"""
class probability:
def __init__(self, prior) -> None:
self.prob = prior
self.odds = self.to_odds(prior)
def to_odds(self, p) -> float:
return p / (1 - p)
def to_prob(self, o) -> float:
return o / (1 + o)
def update(self, test) -> None:
posterior_odds = test.b_factor * self.odds
self.odds = posterior_odds
self.prob = self.to_prob(posterior_odds)
class test:
def __init__(self, sensitivity, specificity) -> None:
self.b_factor = self.bayes_factor(sensitivity, specificity)
def bayes_factor(self, sensitivity, specificity) -> float:
# false positive rate
fpr = 1 - specificity
return sensitivity / fpr
if __name__ == "__main__":
T = test(0.98, 0.98)
prevalence = 0.017 # COVID-19, Jan 22-30 Italy
prevalence = 0.2 # prob to be infected after 9 days
PSp = probability(prevalence) # prob to be sick if the test gives a positive result
PSp.update(T)
print(PSp.prob)