Jednovýběrové testy pro proporce

Testování hypotéz v Pythonu

James Chapman

Curriculum Manager, DataCamp

Rekapitulace kapitoly 1

  • Je tvrzení o neznámé proporci populace přijatelné?

 

  1. Směrodatná chyba výběrové statistiky z bootstrapového rozdělení
  2. Výpočet standardizované testové statistiky
  3. Výpočet p-hodnoty
  4. Rozhodnutí, která hypotéza dávala největší smysl

 

  • Nyní vypočítáme testovou statistiku bez použití bootstrapového rozdělení
Testování hypotéz v Pythonu

Standardizovaná testová statistika pro proporce

$p$: proporce populace (neznámý parametr populace)

$\hat{p}$: výběrová proporce (výběrová statistika)

$p_{0}$: hypotetická proporce populace

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

Při platnosti $H_{0}$ platí $p = p_{0}$, tedy

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

Testování hypotéz v Pythonu

Zjednodušení výpočtu směrodatné chyby

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ Při platnosti $H_0$ závisí $SE_{\hat{p}}$ na hypotetickém $p_0$ a velikosti výběru $n$

Při platnosti $H_{0}$,

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

  • Využívá pouze výběrové informace ($\hat{p}$ a $n$) a hypotetický parametr ($p_{0}$)
Testování hypotéz v Pythonu

Proč z místo 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$ se počítá z $\bar{x}$
    • $\bar{x}$ odhaduje průměr populace
    • $s$ odhaduje směrodatnou odchylku populace
    • $\uparrow$ nejistota v odhadu parametru
  • t-rozdělení – těžší chvosty než normální rozdělení
  • $\hat{p}$ se vyskytuje pouze v čitateli, proto jsou z-skóre dostačující
Testování hypotéz v Pythonu

Věkové kategorie na Stack Overflow

$H_{0}$: Proporce uživatelů Stack Overflow mladších třiceti let $=0{,}5$

$H_{A}$: Proporce uživatelů Stack Overflow mladších třiceti let $\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
Testování hypotéz v Pythonu

Proměnné pro z

p_hat = (stack_overflow['age_cat'] == 'Under 30').mean()
0.5356037151702786
p_0 = 0.50
n = len(stack_overflow)
2261
Testování hypotéz v Pythonu

Výpočet z-skóre

$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
Testování hypotéz v Pythonu

Výpočet p-hodnoty

CDF normálního rozdělení. Část křivky vlevo od -2 je červeně, část vpravo od 2 je zeleně. Levostranný ("méně než"):

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

Pravostranný ("větší než"):

p_value = 1 - norm.cdf(z_score)

Oboustranný ("nerovná se"):

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
Testování hypotéz v Pythonu

Pojďme si procvičit!

Testování hypotéz v Pythonu

Preparing Video For Download...