Testy proporcji dla jednej próby

Testowanie hipotez w Pythonie

James Chapman

Curriculum Manager, DataCamp

Podsumowanie rozdziału 1

  • Czy twierdzenie o nieznanej proporcji populacji jest wiarygodne?

 

  1. Błąd standardowy statystyki próby z rozkładu bootstrap
  2. Obliczenie znormalizowanej statystyki testowej
  3. Obliczenie p-wartości
  4. Wybór najbardziej prawdopodobnej hipotezy

 

  • Teraz oblicz statystykę testową bez użycia rozkładu bootstrap
Testowanie hipotez w Pythonie

Znormalizowana statystyka testowa dla proporcji

$p$: proporcja w populacji (nieznany parametr populacji)

$\hat{p}$: proporcja w próbie (statystyka próby)

$p_{0}$: hipotezowana proporcja w populacji

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

Przy założeniu prawdziwości $H_{0}$: $p = p_{0}$, zatem

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

Testowanie hipotez w Pythonie

Uproszczenie obliczeń błędu standardowego

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ Przy $H_0$, $SE_{\hat{p}}$ zależy od hipotezowanego $p_0$ i liczebności próby $n$

Przy założeniu prawdziwości $H_{0}$,

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

  • Wykorzystuje tylko informacje z próby ($\hat{p}$ i $n$) oraz hipotezowany parametr ($p_{0}$)
Testowanie hipotez w Pythonie

Dlaczego z zamiast 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$ jest obliczane na podstawie $\bar{x}$
    • $\bar{x}$ szacuje średnią populacji
    • $s$ szacuje odchylenie standardowe populacji
    • $\uparrow$ niepewność w szacowaniu parametru
  • Rozkład t – grubsze ogony niż rozkład normalny
  • $\hat{p}$ występuje tylko w liczniku, więc z-score jest właściwy
Testowanie hipotez w Pythonie

Kategorie wiekowe Stack Overflow

$H_{0}$: Odsetek użytkowników Stack Overflow poniżej 30. roku życia $=0.5$

$H_{A}$: Odsetek użytkowników Stack Overflow poniżej 30. roku życia $\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
Testowanie hipotez w Pythonie

Zmienne do obliczenia z

p_hat = (stack_overflow['age_cat'] == 'Under 30').mean()
0.5356037151702786
p_0 = 0.50
n = len(stack_overflow)
2261
Testowanie hipotez w Pythonie

Obliczanie statystyki 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
Testowanie hipotez w Pythonie

Obliczanie p-wartości

Dystrybuanta rozkładu normalnego. Fragment krzywej poniżej -2 zaznaczono na czerwono, powyżej 2 – na zielono. Lewostronny („mniejszy niż"):

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

Prawostronny („większy niż"):

p_value = 1 - norm.cdf(z_score)

Dwustronny („różny od"):

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
Testowanie hipotez w Pythonie

Czas na ćwiczenia!

Testowanie hipotez w Pythonie

Preparing Video For Download...