Setup

library('ggplot2')
library('dplyr')
library('nycflights13')

Contextualizando

Construir limites nos quais achamos que a média se encaixa (intervalo de confiança).

Considerando o data set como a população

# Considere que há 17000 observações de cada e que trata-se da população.
pop = na.omit(flights) %>% 
  filter(carrier == 'UA' | carrier == 'DL', arr_delay >= 0) %>%
  select(carrier,arr_delay) %>%
  group_by(carrier) %>%
  sample_n(17000) %>%
  ungroup()

Amostras de 1000 observações para DL.

sample1 = na.omit(pop) %>% 
  select(carrier,arr_delay) %>%
  filter(carrier == 'DL') %>%
  mutate(sample_id = '1') %>%
  sample_n(1000)

sample2 = na.omit(pop) %>% 
  select(carrier,arr_delay) %>%
  filter(carrier == 'DL') %>%
  mutate(sample_id = '2') %>%
  sample_n(1000)
samples = rbind(sample1,sample2)

Calculando o intervalo de confiança (95%)…

se = sd(sample1$arr_delay) / sqrt(nrow(sample1))
lower = mean(sample1$arr_delay) - 1.96 * se
upper = mean(sample1$arr_delay) + 1.96 * se
ic_1 = c(lower,upper)
mean(sample1$arr_delay)
## [1] 34
ic_1
## [1] 30.59068 37.40932
se = sd(sample2$arr_delay) / sqrt(nrow(sample2))
lower = mean(sample2$arr_delay) - 1.96 * se
upper = mean(sample2$arr_delay) + 1.96 * se
ic_2 = c(lower,upper)
mean(sample2$arr_delay)
## [1] 38.54
ic_2
## [1] 34.75769 42.32231

Visualizando IC

toPlot = summarise(group_by(samples, sample_id), mean = mean(arr_delay))
toPlot = mutate(toPlot, lower = ifelse(toPlot$sample_id == 1,ic_1[1],ic_2[1]))
toPlot = mutate(toPlot, upper = ifelse(toPlot$sample_id == 1,ic_1[2],ic_2[2]))
ggplot(toPlot, aes(x = sample_id, y=mean, colour = sample_id )) + 
    geom_point() +
    geom_errorbar(aes(ymin=lower, ymax=upper), width=.1)

O que posso dizer? Que, muito provavelmente, elas vieram da mesma população.

Hipóteses

Hipótese nula: não haver diferenças. Algo que queremos rejeitar com nosso experimento.

Hipótese alternativa: uma teoria que você deseja reforçar. Nunca provar! Estamos falando de probabilidade da hipótese alternativa ser verdadeira.

Ho e H1 devem ser mutuamente exclusivas.

Teste estatístico: (efeito (variancia explicada pelo modelo) / erro (não explicada) )

Nos permite utilizar métodos estatísticos para tomar decisões. Tipicamente, comparando duas ou mais soluções/alternativas em um mesmo contexto.

Estabelece um nível de probabilidade (p-value) através do qual consideramos os resultados da nossa amostra confiáveis o suficiente para rejeitar a hipótese nula.

Note que tem uma semântica muito parecida com teste de sistemas. Falha ao rejeitar a hipótese nula não significa dizer que ela é verdadeira. Somente significa que o experimento não encontrou evidencias para rejeitá-la.

Direcional ou não: <, > e !=

Resultado

  • Rejeitar a hipótese nula – Encontrar significância ou resultado significante
  • Não rejeitar a hipótese nula (fail to reject) – Não prova que ela é verdadeira, indica que não encontramos no estudo específico evidências suficientes para rejeitá-la
  • Um número no intervalo [0,1] chamado p-valor (p-value) – Um nível de probabilidade

Comparando alternativas: DL atrasa mais que UA?

Teste de hipótese “na mão”.

dl = sample_n(filter(pop, na.rm = T, carrier == "DL", arr_delay > 0), 1000)
ua = sample_n(filter(pop, na.rm = T, carrier == "UA", arr_delay > 0), 1000)

diff_amostras = mean(dl$arr_delay) - mean(ua$arr_delay)
diff_amostras
## [1] -0.483
# sigle-tailed (95%)
tabela = 1.65

# stats dl
mean_dl = mean(dl$arr_delay)
sd_dl = sd(dl$arr_delay)

# stats ua
mean_ua = mean(ua$arr_delay)
sd_ua = sd(ua$arr_delay)

se_diff = sqrt( ((sd_dl*sd_dl) / 1000) + ( (sd_ua*sd_ua) / 1000 ) )
critical = 1.65 * se_diff

#comparando
critical
## [1] 3.908449
diff_amostras
## [1] -0.483
# falhamos em rejeitar a hipótese nula, pois p-valor é maior que o limite.
# Significa dizer que há uma probabilidade alta de não haver diferença significativa entre os atrasos.
## Para os nossos dados, não há evidência estatística de que a DL atrase mais que a UA

## com ICS
se = sd(dl$arr_delay) / sqrt(nrow(dl))
mean(dl$arr_delay)
## [1] 37.711
lower = mean(dl$arr_delay) - 1.96 * se
upper = mean(dl$arr_delay) + 1.96 * se
ic_dl = c(lower,upper)
ic_dl
## [1] 34.19166 41.23034
se = sd(ua$arr_delay) / sqrt(nrow(ua))
mean(ua$arr_delay)
## [1] 38.194
lower = mean(ua$arr_delay) - 1.96 * se
upper = mean(ua$arr_delay) + 1.96 * se
ic_ua = c(lower,upper)
ic_ua
## [1] 35.16588 41.22212
# Explicar graus de liberdade.
t.test(dl$arr_delay,ua$arr_delay, alternative="greater")
## 
##  Welch Two Sample t-test
## 
## data:  dl$arr_delay and ua$arr_delay
## t = -0.2039, df = 1954.488, p-value = 0.5808
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  -4.381106       Inf
## sample estimates:
## mean of x mean of y 
##    37.711    38.194

P-valor

Propabiblidade de que a estatística do teste assuma um valor extremo em relação ao valor observado quando H0 é verdadeira.

Erros

Onde podemos errar?

  • Ho é verdadeira e a rejeitamos - Tipo 1 (alpha)
  • Ho é falsa e não rejeitamos - Tipo 2 (beta)

Tipicamente, utilizamos 5% para alpha, o que significa dizer que nós aceitamos o fato de que nosso experimento tem 5% de chance de rejeitar a ho quando ela é verdadeira. Historicamente, o tipo 2 é considerado menos grave. Por isso, utiliza-se níveis de aceitabilidade maiores (10%, 20%…)

Relação entre IC e teste de hipótese

Seja o intervalo de confiança (95%) para a média de atrasos da DL:

mean(sample1$arr_delay)
## [1] 34
ic_1
## [1] 30.59068 37.40932
se
## [1] 1.544961
  • H0: u = 35.
  • H1: u != 35.

O p-valor para 38 seria alto ou baixo?

O intervalo de confiança é feito com todos os valores de u0 para os quais não rejeitamos a Ho. Se a média cai fora do intervalo, o p-valor seria menor que 5%. Portanto, rejeitariamos H0.

Pré-condições

Existem métodos mais robustos, caso não soubermos a distribuição da pop. e a homogeneidade da variância.

  • Assumimos que os dados são normalmente distribuídos. Caso não sejam, Wilcoxon rank sum test seria mais apropriado
  • Assumimos homogeneidade da variância - R já utiliza o teste Welch’s para corrigir isso.
  • Teste para mais de duas médias: ANOVA
  • Teste para saber se uma dist é normal: Shapiro-Wilk

Ritmo

  • Hipóteses
  • Decidir se é single-tailed ou two-tailed
  • Coletar dados
  • Escolher teste estatístico e definir nível de significancia
  • Computar a estatística e identificar p-valor
  • Analisar resultado
  • Outcome – Rejeitar a hipótese nula e aceitar a hipótese alternativa – Falha em rejeitar a hipótese nula

Controvérsias

  • Rejeitar a hipótese nula diz muito pouco sobre ela e sobre a h1
  • Escolha de h0 com o intuito de rejeitá-la
  • É melhor estimar um valor com um IC do que aceitar ou rejeitar uma decisão baseado em uma única hipótese
  • The “alternative” to significance testing is repeated testing: aumentar a amostra e a repetição de experimentos
  • Rejeitar H0 pode não oferecer suporte algum a H1

Material adicional

O material da Kahn Academy é bem direto e muito didático para entender os conceitos básicos. Aqui estão algumas boas referências: