Алла Тамбовцева
Импортируем функцию для вычисления факториала из модуля math
:
from math import factorial
Посчитаем $n!$ для разных $n$:
factorial(4) # 4!
24
factorial(6) # 6!
720
factorial(100) # 100!
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Для вычисления биномиального коэффициента $C_n^k$ нам потребуется модуль special
из библиотеки для научных вычислений scipy
(сокращение от SCIentific PYthon). Импортируем его:
import scipy.special as sp
Теперь воспользуемся функцией binom
, которая позволит посчитать нам биномиальный коэффициент. Для примера посчитаем биномиальный коэффициент $C_4^2$:
sp.binom(4, 2) # сначала указывается n, потом k
6.0
Для создания биномиальной случайной величины и вычисления вероятностей ее значений нам понадобится модуль stats
из той же библиотеки scipy
. Импортируем его:
import scipy.stats as st
Создадим случайную величину $X$, имеющую биномиальное распределение с параметрами $n=10$, $p=0.5$, то есть величину, которая описывает число успехов в серии из $10$ испытаний Бернулли, где вероятность успеха в одном испытании равна $0.5$.
X = st.binom(n=10, p=0.5)
Можем найти ее математическое ожидание и дисперсию:
X.expect() # E(X), expected value
5.000000000000005
X.var() # D(X)=Var(X), variance
2.5
Теперь давайте построим ряд распределения этой случайной величины: соотнесем значения величины и их вероятности. Ясно, что значениями этой случайной величины являются целые числа от 0 до 10 включительно (число успехов в 10 испытаниях). Реализуем такой цикл: для каждого значения $k$ от 0 до 10 включительно будем считать вероятность $P(X=k)$ с помощью метода .pmf()
.
for k in range(0, 11): # range(0, 11) - все целые числа от 0 до 10 (правый конец интервала не включается)
print(k, X.pmf(k))
0 0.0009765625 1 0.00976562500000001 2 0.04394531249999999 3 0.11718750000000014 4 0.20507812500000022 5 0.24609375000000025 6 0.20507812500000022 7 0.11718750000000014 8 0.04394531249999999 9 0.00976562500000001 10 0.0009765625
Теперь мы можем приступить к решению задачи 1 из семинара.
Задача 1
Известно, что $70$% студентов очной формы обучения совмещают обучение с работой. Для проведения интервью мы случайным образом выбираем $10$ студентов.
a. Какова вероятность того, что среди выбранных респондентов будет не менее $8$ работающих студентов?
b. Сколько работающих студентов, в среднем, мы можем встретить среди выбранных $10$ студентов?
c. Пусть 𝑋 – число работающих студентов среди выбранных $10$ респондентов. Найдите дисперсию и стандартное отклонение случайной величины 𝑋.
Одно испытание Бернулли – опрос одного студента. Успех – студент совмещает работу и учебу, неудача – не совмещает. $p=0.7$ и $q=0.3$. Раз опрашиваем $10$ студентов, имеем серию из $n=10$ испытаний Бернулли. Сгенерируем величину x, которая имеет биномиальное распределение с параметрами $n=10$, $p=0.7$.
x = st.binom(n=10, p=0.7)
a. $P(X \geq 8) = P(X=8) + P(X=9) + P(X=10)$
x.pmf(8) + x.pmf(9) + x.pmf(10)
0.3827827863999999
b. $E(X)$
x.expect() # на самом деле ровно 7, np = 10 * 0.7 = 0.7
7.000000000000002
c. $D(X)$ и $sd(X)$
x.var() # на самом деле ровно 2.1, npq = 10 * 0.7 * 0.3 = 2.1
2.1000000000000005
x.std()
1.449137674618944