Ensamplingstest för proportioner

Hypotestestning i Python

James Chapman

Curriculum Manager, DataCamp

Återblick på kapitel 1

  • Är ett påstående om en okänd populationsproportion rimligt?

 

  1. Standardfel för sampelstatistika från bootstrapfördelning
  2. Beräkna en standardiserad teststatistika
  3. Beräkna ett p-värde
  4. Avgör vilken hypotes som stämde bäst

 

  • Beräkna nu teststatistikan utan bootstrapfördelning
Hypotestestning i Python

Standardiserad teststatistika för proportioner

$p$: populationsproportion (okänd populationsparameter)

$\hat{p}$: sampelproportion (sampelstatistika)

$p_{0}$: hypotetisk populationsproportion

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

Under antagandet att $H_{0}$ är sann, $p = p_{0}$, ger det

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

Hypotestestning i Python

Förenkling av standardfelberäkningarna

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ Under $H_0$ beror $SE_{\hat{p}}$ på den hypotetiska $p_0$ och urvalsstorleken $n$

Under antagandet att $H_{0}$ är sann,

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

  • Använder bara sampelinfo ($\hat{p}$ och $n$) och den hypotetiska parametern ($p_{0}$)
Hypotestestning i Python

Varför z i stället för 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$ beräknas från $\bar{x}$
    • $\bar{x}$ skattar populationsmedelvärdet
    • $s$ skattar populationsstandardavvikelsen
    • $\uparrow$ osäkerhet i vår skattning av parametern
  • t-fördelning – fetare svansar än normalfördelningen
  • $\hat{p}$ förekommer bara i täljaren, så z-värden räcker
Hypotestestning i Python

Ålderskategorier på Stack Overflow

$H_{0}$: Andelen Stack Overflow-användare under trettio $=0.5$

$H_{A}$: Andelen Stack Overflow-användare under trettio $\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
Hypotestestning i Python

Variabler för z

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

Beräkna z-värdet

$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
Hypotestestning i Python

Beräkna p-värdet

Normalfördelningens CDF. Den del av kurvan som är mindre än -2 är röd och den del som är större än 2 är grön. Vänstersvansad ("less than"):

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

Högersvansad ("greater than"):

p_value = 1 - norm.cdf(z_score)

Tvåsvansad ("not equal"):

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
Hypotestestning i Python

Nu kör vi en övning!

Hypotestestning i Python

Preparing Video For Download...