Функция математического ожидания питон

Использование функций scipy.stats. Доверительные интервалы.

В математической статистике интервальной оценкой называется результат использования выборки для вычисления интервала возможных значений неизвестного параметра, оценку которого нужно построить. Следует отличать от точечной оценки, которая даёт лишь одно значение. Самым распространенным видом интервальных оценок являются доверительные интервалы.

Доверительная вероятность — вероятность того, что доверительный интервал накроет неизвестное истинное значение параметра, оцениваемого по выборочным данным.

Оценка математического ожидания нормального распределения при известном \(\sigma\)

Количественный признак генеральной совокупности X распределен нормально и известно среднеквадратическое отклонение этого распределения. Из генеральной совокупности формируется выборка, по которой определяется математическое ожидание выборки \(\hat\).

Необходимо найти доверительный интервал \([\hat-d, \hat+d]\), который покрывает неизвестное математическое ожидание \(a\) генеральной совокупности с надежностью или доверительной вероятностью \(\gamma\): \(P(|\hat-a|

Математическое ожидание выборки \(\hat\) рассматривается как нормально-распределенная случайная величина с математическим ожиданием \(\hat\) и стандартным отклонением \(\sigma/\sqrt\).

# Стандартное отклонение генеральной совокупности sigma = 0.8 # Математическое ожидание генеральной совокупности mean = 4.1 # Формируем выборку из генеральной совокупности # Объем выборки n = 30 # Выборка data = np.random.normal(loc=mean, scale=sigma, size=n) # Надежность оценки (доверительная вероятность) gamma = 0.95 # Оценка математического ожидания выборки mean_of_sample = np.mean(data) # Стандартное отклонение выборочной средней sigma_of_mean = scipy.stats.sem(data) 
  • первый аргумент: надежность оценки (доверительная вероятность)
  • второй аргумент (loc): оценка математического ожидания
  • третий аргумент (scale): оценка стандартного отклонения математического ожидания выборки, вычисляемой при помощи функции scipy.stats.sem
interval = scipy.stats.norm.interval(gamma, loc = mean_of_sample, scale = sigma_of_mean) print('Математическое ожидание принадлежит интервалу [; ]'.format(interval[0],interval[1])) 
Математическое ожидание принадлежит интервалу [3.89; 4.47] 

Оценка математического ожидания нормального распределения при неизвестном \(\sigma\)

Если стандартное отклонение генеральной совокупности неизвестно, то для определения доверительного интервала используется распределение Стьюдента: \[P(\hat-t_\gamma s/\sqrt < a < \hat+t_\gamma s/\sqrt) = 2 \int_^ S(t,n) dt = \gamma\]

где \(s\) — “исправленное” среднеквадратичное отклонение выборки, \(S(t,n)\) — плотность распределения Стьюдента.

# Надежность оценки gamma = 0.95 # Оценка математического ожидания mean_of_sample = np.mean(data) # Стандартное отклонение выборочной средней совокупности sigma_of_mean = scipy.stats.sem(data) 
  • первый аргумент: надежность оценки (доверительная вероятность)
  • второй аргумент df: число степеней свободы, равное количеству элементов в выборке, уменьшенному на 1
  • третий аргумент (loc): оценка математического ожидания
  • четвертый аргумент (scale): оценка стандартного отклонения математического ожидания выборки, вычисляемой при помощи функции scipy.stats.sem
# Доверительный интервал математического ожидания interval = scipy.stats.t.interval(gamma, df = n-1, loc = mean_of_sample, scale = sigma_of_mean) print(interval) 
(3.8810695725888413, 4.482390285924866) 

При больших выборках (n>30) распределение Стьюдента стремится к нормальному и для оценки доверительного интервала может использоваться нормальное распределение. При малых выборках нормальное распределение будет давать более узкий (т.е. слишком оптимистичный) интервал, в отличие от распределения Стьюдента.

# Очень маленькая выборка n = 5 data = np.random.normal(loc=mean, scale=sigma, size=n) # Оценка математического ожидания mean_of_sample = np.mean(data) # Стандартное отклонение выборочной средней совокупности sigma_of_mean = scipy.stats.sem(data) # Доверительный интервал математического ожидания с использованием распределения Стьюдента interval = scipy.stats.t.interval(gamma, df = n-1, loc = mean_of_sample, scale = sigma_of_mean) print('Интервал по распределению Стьюдента [; ]'.format(interval[0],interval[1])) # Доверительный интервал математического ожидания с использованием нормального распределения interval = scipy.stats.norm.interval(gamma, loc = mean_of_sample, scale = sigma_of_mean) print('Интервал по нормальному распределению [; ]'.format(interval[0],interval[1])) 
Интервал по распределению Стьюдента [3.000; 4.419] Интервал по нормальному распределению [3.209; 4.210] 

Список использованных источников

Источник

Статистика и анализ данных : теория и практика

Распределение дискретной случайной величины — это полный список всех ее возможных значений с проставленными вероятностями этих значений.

Читайте также:  How to create session in java

В качестве примера рассмотри распределение выданных ипотечных займов за неделю в некотором банке

num prob
0 0 0.10
1 1 0.10
2 2 0.20
3 3 0.30
4 4 0.15
5 5 0.10
6 6 0.05

Математическое ожидание $\mu$ дискретной случайной величины X — это взвешенное среднее всех возможных исходов , где в качестве весов служат вероятности каждого исхода

Смоделируем эту же случайную величину, пусть у нас есть данные по недельной выдаче ипотечных кредитов за 100 недель
X=np.repeat([0,1,2,3,4,5,6],[10,10,20,30,15,10,5]) X
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6])
Среднее количество выданных кредитов
Выведем количество уникальных значений
И количество их повторов в течении 100 недель
array([10, 10, 20, 30, 15, 10, 5], dtype=int64)
Функция bincount возвращает число вхождений каждого значения в массив
неотрицательных целых чисел
А теперь сделаем из них датафрейм
В результате получили первоначальный датафрейм
Графическое представление распределения тоже можно получить двумя способами
df['prob'].plot(kind='bar') plt.xlabel('num') plt.ylabel('prob')

plt.bar(df.num, df.prob) plt.xlabel('num') plt.ylabel('prob')
График получается аналогичный.
Дисперсия $\sigma^2$ (variance) дискретной случайной величины X представляет собой взвешенное среднее квадратов разностей между всеми ее возможными значениями и математическим ожиданием. В качестве весов служат вероятности соответствующих исходов.
var=sum((df.num-mu)**2*df.prob) var
Стандартное отклонение $\sigma$ (standard deviation) это корень квадратный из дисперсии
Биномиальное распределение-это теоретическое распределение, которое применяется к случайным переменным и удовлетворяет следующим трем характеристикам:
 • Условие 1: для индивидуального наблюдения существует только два возможных результата, обычно обозначаемых как успех и неудача. Если вероятность успеха равна p, то вероятность неудачи должна быть равна 1 – p.
 • Условие 2: эксперимент выполняется фиксированное число раз, обычно обозначаемое n.
 • Условие 3: все эксперименты независимы, что означает, что знание результата эксперимента не меняет вероятности следующего.
 Поэтому вероятность успеха (и неудачи) остается прежней. Если эти условия выполняются, то мы говорим, что случайная величина следует биномиальному распределению или что случайная величина является биномиальной случайной величиной. Мы можем получить точное распределение вероятностей биномиальной случайной величины X по формуле : 
Эта функция называется вероятностной массовой функцией и определяет вероятность
x успехов при заданном объеме выборки n и вероятности успеха p.
Величина $\frac$ определяет количество возможных комбинаций состоящих 
из x успехов в выборке объема n.
Пример работы с биномиальным распределением :
Компания электронной коммерции продает женскую одежду. Замечено, что 10% их клиентов возвращают товары, купленные ими по многим причинам (таким как несоответствие размера, цвета и материала). В определенный день 20 клиентов приобрели товары у этой компании . 
 1. Вероятность того, что ровно 5 клиентов вернут товар. 2. Вероятность того, что максимум 5 клиентов вернут товар. 3. Вероятность того, что более 5 клиентов будут возвращать товары, приобретенные по ним. 4. Среднее число клиентов, которые, скорее всего, вернут товары, а также дисперсия и стандартное отклонение числа возвратов.
 Мы решаем каждый из них следующим образом:
1. Вероятность того, что ровно 5 клиентов вернут товар.
 Функция stats.binom.pmf() вычисляет PMF для биномиального распределения и 
принимает три параметра: а) ожидаемое число успешных испытаний (5) b) общее число испытаний (20) c) вероятность успеха (0,1) 
from scipy import stats stats.binom.pmf(5, 20, 0.1)
Соответствующая вероятность равна 0,03192, то есть вероятность того, 
что ровно 5 клиентов вернут товар, составляет примерно 3%. Чтобы визуализировать, как изменяется PMF с увеличением числа успешных испытаний, мы создадим список всех возможных чисел успехов (от 0 до 20) и 
соответствующих значений PMF и нарисуем гистограмму, как показано на рис. 3.1.
# range(0,21) возвращает все значения от 0 до 20 (исключая 21) import seaborn as sns pmf_df = pd.DataFrame(< 'success': range(0,21),'pmf': list(stats.binom.pmf(range(0,21),20, 0.1))>) # Выводим cтолбчатую диаграмму с количеством успехов и их вероятностью sns.barplot(x = pmf_df.success, y = pmf_df.pmf) plt.ylabel('pmf') plt.xlabel('Number of items returned') 

2. Вероятность того, что максимум 5 клиентов вернут товар. Функция stats.binom.cdf() вычисляет CDF для биномиального распределения. В этом случае функция кумулятивного распределения возвращает вероятность того, что максимум 5 клиентов вернут товары.
stats.binom.cdf(5, 20, 0.1)
3. Вероятность того, что более 5 клиентов будут возвращать товары, приобретенные по ним. Общая вероятность любого количества клиентов, возвращающих товары (включая 0), всегда равна 1,0. таким образом, вероятность того, что более 5 клиентов вернут товары, может быть вычислена путем вычитания вероятности того, что максимум 5 клиентов вернут товары из 1,0. Другими словами, вероятность того, что более 5 клиентов вернут товары, может быть получена путем вычисления CDF из 5, а затем вычитания его из 1.0.
1 - stats.binom.cdf(5, 20, 0.1)
4. среднее число клиентов, которые, вероятно, вернут товары, а также дисперсия и стандартное отклонение числа возвратов.
 а) среднее значение биномиального распределения задается n * p (b) дисперсия биномиального распределения задается n * p * (1 − p)
mean, var = stats.binom.stats(20, 0.1) print('Average: ', mean , 'Variance:', var)
 Во многих ситуациях нас может заинтересовать подсчет количества событий, которые могут произойти за определенный промежуток времени или пространства. Например, количество отмен заказов клиентами на портале электронной коммерции, количество жалоб клиентов, количество снятия наличных в банкомате, количество типографских ошибок в книге и т. д. Чтобы найти вероятность числа событий, мы используем распределение Пуассона. PMF распределения Пуассона задается формулой :
P(X=k) - вероятность k успешных испытаний, $\lambda$ - ожидаемое количество успехов (среднее количество успехов 
в заданной области возможных исходов), k - количество успехов в единицу времени. 
Математическое ожидание и дисперсия задаются соответственно следующими выражениями
Выведем графики распределения для различных $\lambda$

Источник

Оцените статью