Построить распределение вероятностей для случайной величины python
В задаче ученик сдает 6 независящих друг от друга экзаменов; вероятность не сдать каждый - 15%
from matplotlib import pyplot as plt
from math import factorial
n_exams = 6
failure_rate = 0.15
distr = []
Необходимо с помощью цикла посчитать вероятности не сдать 0,1,2,3 ... 6 экзаменов и записать их в список
Моя попытка:
for k in range(0, n_exams + 1):
distr.append(
failure_rate ** k
)
результат:
[1.0, 0.15, 0.0225, 0.0033749999999999995, 0.00050625, 7.593749999999998e-05, 1.1390624999999997e-05]
Все так(вроде) кроме первого элемента в списке (ученик сдаст все экзамены)
Ответы (2 шт):
Ну что-то продвижения не видно. Давайте разберёмся.
Пусть вероятность провала одного экзамена f
(fault), а сдачи s=1-f
(success)
Если независимо сдаётся n
экзаменов, то событие "провалено ровно k
из них" означает, что мы можем выбрать одно из сочетаний (k из n) проваленных экзаменов, и таких сочетаний, как нам говорит комбинаторика,
C(n,k)=n!/(k!(n-k)!)
Вероятность каждого одиночного сочетания есть произведение вероятностей событий - k
провалено, и (n-k)
сдано, т.е.
p = f^k * s^(n-k)
а суммарная вероятность всех вариантов
P(n,k,f,s) = C(n,k) * f^k * s^(n-k)
Вот и получили биномиальное распределение (и стоит почитать учебник мадам Вентцель, она же писательница И.Грекова)
Итого:
from math import comb
f = 0.15
s = 1 - f
n = 6
P = [comb(n,k) * f**k * s**(n-k) for k in range(n+1)]
print(P)
[0.37714951562499993, 0.39933478124999994, 0.17617710937499995,
0.04145343749999999, 0.005486484375, 0.0003872812499999999,
1.1390624999999997e-05]
Вам нужно биномиальное распределение. "В лоб":
import math
p = 0.15
q = 1 - p
def prob(n):
return math.factorial(6)/math.factorial(n)/math.factorial(6-n)*p**n*q**(6-n)
for i in range(0,7):
print(i, prob(i))
Это - вероятности не сдать соответствующее количество экзаменов