Einstichproben-Anteilstests

Hypothesentests in Python

James Chapman

Curriculum Manager, DataCamp

Kapitel 1: Rückblick

  • Ist eine Behauptung über einen unbekannten Populationsanteil plausibel?

 

  1. Standardfehler der Stichprobenstatistik aus der Bootstrap-Verteilung
  2. Standardisierte Teststatistik berechnen
  3. p-Wert berechnen
  4. Entscheiden, welche Hypothese am sinnvollsten ist

 

  • Nun die Teststatistik ohne Bootstrap-Verteilung berechnen
Hypothesentests in Python

Standardisierte Teststatistik für Anteile

$p$: Populationsanteil (unbekannter Parameter)

$\hat{p}$: Stichprobenanteil (Stichprobenstatistik)

$p_{0}$: angenommener Populationsanteil

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

Unter der Annahme $H_{0}$ gilt $p = p_{0}$, also

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

Hypothesentests in Python

Standardfehler vereinfachen

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ Unter $H_0$ hängt $SE_{\hat{p}}$ von angenommenem $p_0$ und Stichprobengröße $n$ ab

Unter der Annahme $H_{0}$ gilt:

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

  • Nutzt nur Stichprobeninfos ($\hat{p}$ und $n$) und den angenommenen Parameter ($p_{0}$)
Hypothesentests in Python

Warum z statt 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$ wird aus $\bar{x}$ berechnet
    • $\bar{x}$ schätzt den Populationsmittelwert
    • $s$ schätzt die Populations-Standardabweichung
    • $\uparrow$ Unsicherheit in der Parameterschätzung
  • t-Verteilung – dickere Tails als Normalverteilung
  • $\hat{p}$ steht nur im Zähler, daher sind z-Scores okay
Hypothesentests in Python

Stack Overflow: Alterskategorien

$H_{0}$: Anteil der Stack-Overflow-Nutzer unter 30 $=0{,}5$

$H_{A}$: Anteil der Stack-Overflow-Nutzer unter 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
Hypothesentests in Python

Variablen für z

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

z-Score berechnen

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

p-Wert berechnen

CDF der Normalverteilung. Der Bereich kleiner als -2 ist rot, größer als 2 ist grün. Linksschwanz ("kleiner als"):

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

Rechtsschwanz ("größer als"):

p_value = 1 - norm.cdf(z_score)

Zweiseitig ("ungleich"):

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

Lass uns üben!

Hypothesentests in Python

Preparing Video For Download...