Основы прикладной математики и информатики

Алла Тамбовцева

Биномиальное распределение

Факториал

Импортируем функцию для вычисления факториала из модуля math:

In [1]:
from math import factorial

Посчитаем $n!$ для разных $n$:

In [2]:
factorial(4) # 4!
Out[2]:
24
In [3]:
factorial(6) # 6!
Out[3]:
720
In [4]:
factorial(100) # 100!
Out[4]:
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Биномиальные коэффициенты

Для вычисления биномиального коэффициента $C_n^k$ нам потребуется модуль special из библиотеки для научных вычислений scipy (сокращение от SCIentific PYthon). Импортируем его:

In [5]:
import scipy.special as sp

Теперь воспользуемся функцией binom, которая позволит посчитать нам биномиальный коэффициент. Для примера посчитаем биномиальный коэффициент $C_4^2$:

In [6]:
sp.binom(4, 2) # сначала указывается n, потом k
Out[6]:
6.0

Биномиальное распределение и биномиальные вероятности

Для создания биномиальной случайной величины и вычисления вероятностей ее значений нам понадобится модуль stats из той же библиотеки scipy. Импортируем его:

In [7]:
import scipy.stats as st

Создадим случайную величину $X$, имеющую биномиальное распределение с параметрами $n=10$, $p=0.5$, то есть величину, которая описывает число успехов в серии из $10$ испытаний Бернулли, где вероятность успеха в одном испытании равна $0.5$.

In [8]:
X = st.binom(n=10, p=0.5)

Можем найти ее математическое ожидание и дисперсию:

In [9]:
X.expect() # E(X), expected value
Out[9]:
5.000000000000005
In [10]:
X.var() # D(X)=Var(X), variance
Out[10]:
2.5

Теперь давайте построим ряд распределения этой случайной величины: соотнесем значения величины и их вероятности. Ясно, что значениями этой случайной величины являются целые числа от 0 до 10 включительно (число успехов в 10 испытаниях). Реализуем такой цикл: для каждого значения $k$ от 0 до 10 включительно будем считать вероятность $P(X=k)$ с помощью метода .pmf().

In [11]:
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$.

In [12]:
x = st.binom(n=10, p=0.7)

a. $P(X \geq 8) = P(X=8) + P(X=9) + P(X=10)$

In [13]:
x.pmf(8) + x.pmf(9) + x.pmf(10)
Out[13]:
0.3827827863999999

b. $E(X)$

In [14]:
x.expect() # на самом деле ровно 7, np = 10 * 0.7 = 0.7
Out[14]:
7.000000000000002

c. $D(X)$ и $sd(X)$

In [15]:
x.var() # на самом деле ровно 2.1, npq = 10 * 0.7 * 0.3 = 2.1
Out[15]:
2.1000000000000005
In [16]:
x.std()
Out[16]:
1.449137674618944