Testes de proporção com uma amostra

Testes de Hipóteses em Python

James Chapman

Curriculum Manager, DataCamp

Recap do Capítulo 1

  • A afirmação sobre uma proporção populacional desconhecida é plausível?

 

  1. Erro padrão da estatística amostral pela distribuição bootstrap
  2. Calcular uma estatística de teste padronizada
  3. Calcular um p-valor
  4. Decidir qual hipótese faz mais sentido

 

  • Agora, calcule a estatística de teste sem usar a distribuição bootstrap
Testes de Hipóteses em Python

Estatística de teste padronizada para proporções

$p$: proporção populacional (parâmetro desconhecido)

$\hat{p}$: proporção amostral (estatística da amostra)

$p_{0}$: proporção populacional hipotetizada

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

Assumindo $H_{0}$ verdadeiro, $p = p_{0}$, então

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

Testes de Hipóteses em Python

Simplificando o cálculo do erro padrão

$SE_{\hat{p}} = \sqrt{\dfrac{p_{0}*(1-p_{0})}{n}}$ $\rightarrow$ Sob $H_0$, $SE_{\hat{p}}$ depende de $p_0$ hipotetizado e do tamanho da amostra $n$

Assumindo $H_{0}$ verdadeiro,

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

  • Usa só info da amostra ($\hat{p}$ e $n$) e o parâmetro hipotetizado ($p_{0}$)
Testes de Hipóteses em Python

Por que z e não 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$ é calculado a partir de $\bar{x}$
    • $\bar{x}$ estima a média populacional
    • $s$ estima o desvio-padrão populacional
    • $\uparrow$ incerteza na estimativa do parâmetro
  • Distribuição t: caudas mais grossas que a normal
  • $\hat{p}$ só aparece no numerador, então z-scores servem
Testes de Hipóteses em Python

Categorias de idade no Stack Overflow

$H_{0}$: Proporção de usuários do Stack Overflow com menos de 30 $=0{,}5$

$H_{A}$: Proporção de usuários do Stack Overflow com menos 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
Testes de Hipóteses em Python

Variáveis para z

p_hat = (stack_overflow['age_cat'] == 'Under 30').mean()
0.5356037151702786
p_0 = 0.50
n = len(stack_overflow)
2261
Testes de Hipóteses em Python

Calculando o escore 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
Testes de Hipóteses em Python

Calculando o p-valor

CDF da distribuição normal. A parte menor que -2 está em vermelho e a parte maior que 2 está em verde. Cauda à esquerda ("menor que"):

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

Cauda à direita ("maior que"):

p_value = 1 - norm.cdf(z_score)

Bicaudal ("diferente 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
Verdadeiro
Testes de Hipóteses em Python

Vamos praticar!

Testes de Hipóteses em Python

Preparing Video For Download...