Одновибіркові тести для часток

Тестування гіпотез у Python

James Chapman

Curriculum Manager, DataCamp

Підсумок розділу 1

  • Чи реалістична заява про невідому частку в сукупності?

 

  1. Стандартна похибка вибіркової статистики з бутстреп-розподілу
  2. Обчисліть стандартизовану тестову статистику
  3. Обчисліть p-значення
  4. Визначте, яка гіпотеза має більше сенсу

 

  • Тепер обчисліть тестову статистику без бутстреп-розподілу
Тестування гіпотез у 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-значення

Функція розподілу (CDF) нормального розподілу. Частина лінії менша за -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...