Одновыборочные тесты для пропорций

Проверка гипотез в Python

James Chapman

Curriculum Manager, DataCamp

Повторение главы 1

  • Насколько правдоподобно утверждение о неизвестной пропорции генеральной совокупности?

 

  1. Стандартная ошибка выборочной статистики из bootstrap-распределения
  2. Вычисление стандартизированной тестовой статистики
  3. Вычисление p-значения
  4. Выбор наиболее обоснованной гипотезы

 

  • Теперь вычислим тестовую статистику без использования bootstrap-распределения
Проверка гипотез в Python

Стандартизированная тестовая статистика для пропорций

$p$: пропорция генеральной совокупности (неизвестный параметр)

$\hat{p}$: выборочная пропорция (выборочная статистика)

$p_{0}$: гипотетическая пропорция генеральной совокупности

$$ z = \frac{\hat{p} - \text{mean}(\hat{p})}{\text{SE}(\hat{p})} = \frac{\hat{p} - p}{\text{SE}(\hat{p})} $$

При условии, что $H_{0}$ верна, $p = p_{0}$, поэтому

$$ z = \dfrac{\hat{p} - p_{0}}{\text{SE}(\hat{p})} $$

Проверка гипотез в Python

Упрощение вычисления стандартной ошибки

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ При $H_0$ $SE_{\hat{p}}$ зависит от гипотетического $p_0$ и объёма выборки $n$

При условии, что $H_{0}$ верна,

$z = \dfrac{\hat{p} - p_{0}}{\sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}}$

  • Используются только данные выборки ($\hat{p}$ и $n$) и гипотетический параметр ($p_{0}$)
Проверка гипотез в Python

Почему z, а не t?

$t = \dfrac{(\bar{x}_{\text{child}} - \bar{x}_{\text{adult}})}{\sqrt{\dfrac{s_{\text{child}}^2}{n_{\text{child}}} + \dfrac{s_{\text{adult}}^2}{n_{\text{adult}}}}}$

  • $s$ вычисляется из $\bar{x}$
    • $\bar{x}$ оценивает среднее генеральной совокупности
    • $s$ оценивает стандартное отклонение генеральной совокупности
    • $\uparrow$ неопределённость в оценке параметра
  • t-распределение — более тяжёлые хвосты, чем у нормального
  • $\hat{p}$ входит только в числитель, поэтому z-оценки подходят
Проверка гипотез в Python

Возрастные категории на Stack Overflow

$H_{0}$: доля пользователей Stack Overflow до тридцати лет $=0{,}5$

$H_{A}$: доля пользователей Stack Overflow до тридцати лет $\neq0{,}5$

alpha = 0.01
stack_overflow['age_cat'].value_counts(normalize=True)
Under 30       0.535604
At least 30    0.464396
Name: age_cat, dtype: float64
Проверка гипотез в Python

Переменные для z

p_hat = (stack_overflow['age_cat'] == 'Under 30').mean()
0.5356037151702786
p_0 = 0.50
n = len(stack_overflow)
2261
Проверка гипотез в Python

Вычисление z-оценки

$z = \dfrac{\hat{p} - p_{0}}{\sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}}$

import numpy as np
numerator = p_hat - p_0
denominator = np.sqrt(p_0 * (1 - p_0) / n)
z_score = numerator / denominator
3.385911440783663
Проверка гипотез в Python

Вычисление p-значения

КФР нормального распределения. Участок левее -2 выделен красным, участок правее 2 — зелёным. Однохвостовый левый («меньше чем»):

from scipy.stats import norm
p_value = norm.cdf(z_score)

Однохвостовый правый («больше чем»):

p_value = 1 - norm.cdf(z_score)

Двухвостовый («не равно»):

p_value = norm.cdf(-z_score) + 
  1 - norm.cdf(z_score)
p_value = 2 * (1 - norm.cdf(z_score))
0.0007094227368100725
p_value <= alpha
True
Проверка гипотез в Python

Давайте потренируемся!

Проверка гипотез в Python

Preparing Video For Download...