Eén-steekproef proportietoetsen

Hypothesetoetsen in Python

James Chapman

Curriculum Manager, DataCamp

Samenvatting hoofdstuk 1

  • Is een bewering over een onbekende populatieproportie plausibel?

 

  1. Standaardfout van steekproefstatistiek uit bootstrapverdeling
  2. Bereken een gestandaardiseerde teststatistiek
  3. Bereken een p-waarde
  4. Kies de meest plausibele hypothese

 

  • Bereken nu de teststatistiek zonder de bootstrapverdeling
Hypothesetoetsen in Python

Gestandaardiseerde teststatistiek voor proporties

$p$: populatieproportie (onbekende populatieparameter)

$\hat{p}$: steekproefproportie (steekproefstatistiek)

$p_{0}$: veronderstelde populatieproportie

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

Als $H_{0}$ waar is, dan $p = p_{0}$, dus

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

Hypothesetoetsen in Python

Standaardfout vereenvoudigen

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ Onder $H_0$ hangt $SE_{\hat{p}}$ af van verondersteld $p_0$ en steekproefgrootte $n$

Als $H_{0}$ waar is,

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

  • Gebruikt alleen steekproefinfo ($\hat{p}$ en $n$) en de veronderstelde parameter ($p_{0}$)
Hypothesetoetsen in Python

Waarom z en niet 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$ wordt berekend uit $\bar{x}$
    • $\bar{x}$ schat het populatiegemiddelde
    • $s$ schat de populatiestandaardafwijking
    • Meer onzekerheid in onze parameterschatting
  • t-verdeling: dikkere staarten dan een normale verdeling
  • $\hat{p}$ staat alleen in de teller, dus z-scores volstaan
Hypothesetoetsen in Python

Leeftijdscategorieën Stack Overflow

$H_{0}$: Aandeel Stack Overflow-gebruikers onder de 30 $=0{,}5$

$H_{A}$: Aandeel Stack Overflow-gebruikers onder de 30 $\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
Hypothesetoetsen in Python

Variabelen voor z

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

De z-score berekenen

$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
Hypothesetoetsen in Python

De p-waarde berekenen

CDF van de normale verdeling. Het deel links van -2 is rood en het deel rechts van 2 is groen. Linkerstaart ("kleiner dan"):

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

Rechterstaart ("groter dan"):

p_value = 1 - norm.cdf(z_score)

Tweeledig ("niet gelijk aan"):

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
Hypothesetoetsen in Python

Laten we oefenen!

Hypothesetoetsen in Python

Preparing Video For Download...