Funkcja rnd.random() zwraca nam liczbę z rozkładu jednostajnego między 0 a 1.
import numpy.random as rnd
rnd.random()
0.32443486245915776
N = 10**4
p, czulosc, swoistosc = 0.08, 0.85, 0.65
chory_plus = 0
chory_minus = 0
zdrowy_plus = 0
zdrowy_minus = 0
for ii in range(N):
# Gdy wylosowana osoba jest chora
if rnd.random()<p:
if rnd.random()<czulosc:
chory_plus +=1
else:
chory_minus +=1
# Gdy wylosowana osoba jest zdrowa
else:
if rnd.random()<swoistosc:
zdrowy_minus +=1
else:
zdrowy_plus +=1
dobra_diagnoza = p*czulosc + (1-p)*swoistosc
dobra_diagnoza_sym = (chory_plus + zdrowy_minus)/(N)
plus_chory = (p*czulosc)/(p*czulosc + (1-p)*(1-swoistosc))
plus_chory_symulacja = (chory_plus)/(chory_plus+zdrowy_plus)
print(f'P-stwo dobrej diagnozy = {dobra_diagnoza:.3f} vs symulacja = {dobra_diagnoza_sym:.3f}\n')
print(f'P-stwo, że osoba z dodatnim wynikiem jest chora {plus_chory:.3f} vs symulacja {plus_chory_symulacja:.3f}')
P-stwo dobrej diagnozy = 0.666 vs symulacja = 0.662 P-stwo, że osoba z dodatnim wynikiem jest chora 0.174 vs symulacja 0.175