Teste de proporție pentru un eșantion

Testarea ipotezelor în Python

James Chapman

Curriculum Manager, DataCamp

Recapitulare capitol 1

  • O afirmație despre o proporție populațională necunoscută este plauzibilă?

 

  1. Eroarea standard a statisticii din distribuția bootstrap
  2. Calcularea unui test statistic standardizat
  3. Calcularea valorii p
  4. Decizia cu privire la ipoteza cea mai plauzibilă

 

  • Acum, calcularea testului statistic fără distribuția bootstrap
Testarea ipotezelor în Python

Testul statistic standardizat pentru proporții

$p$: proporția populației (parametru necunoscut)

$\hat{p}$: proporția eșantionului (statistică)

$p_{0}$: proporția populației ipotezate

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

Asumând că $H_{0}$ este adevărată, $p = p_{0}$, deci

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

Testarea ipotezelor în Python

Simplificarea calculelor erorii standard

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ Sub $H_0$, $SE_{\hat{p}}$ depinde de $p_0$ ipotezat și de mărimea eșantionului $n$

Asumând că $H_{0}$ este adevărată,

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

  • Folosește doar informațiile din eșantion ($\hat{p}$ și $n$) și parametrul ipotezat ($p_{0}$)
Testarea ipotezelor în Python

De ce z și nu 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$ este calculat din $\bar{x}$
    • $\bar{x}$ estimează media populației
    • $s$ estimează abaterea standard a populației
    • $\uparrow$ incertitudine în estimarea parametrului
  • Distribuția t — cozi mai late decât distribuția normală
  • $\hat{p}$ apare doar în numărător, deci scorurile z sunt adecvate
Testarea ipotezelor în Python

Categorii de vârstă Stack Overflow

$H_{0}$: Proporția utilizatorilor Stack Overflow sub treizeci de ani $=0.5$

$H_{A}$: Proporția utilizatorilor Stack Overflow sub treizeci de ani $\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
Testarea ipotezelor în Python

Variabile pentru z

p_hat = (stack_overflow['age_cat'] == 'Under 30').mean()
0.5356037151702786
p_0 = 0.50
n = len(stack_overflow)
2261
Testarea ipotezelor în Python

Calcularea scorului 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
Testarea ipotezelor în Python

Calcularea valorii p

CDF-ul distribuției normale. Partea liniei mai mică decât -2 este roșie, iar partea mai mare decât 2 este verde. Coadă stângă ("mai mic decât"):

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

Coadă dreaptă ("mai mare decât"):

p_value = 1 - norm.cdf(z_score)

Două cozi ("diferit de"):

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
Testarea ipotezelor în Python

Să exersăm!

Testarea ipotezelor în Python

Preparing Video For Download...