library('ggplot2')
library('dplyr')
library('nycflights13')
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()
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ó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
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
Propabiblidade de que a estatística do teste assuma um valor extremo em relação ao valor observado quando H0 é verdadeira.
Onde podemos errar?
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%…)
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
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.
Existem métodos mais robustos, caso não soubermos a distribuição da pop. e a homogeneidade da variância.
O material da Kahn Academy é bem direto e muito didático para entender os conceitos básicos. Aqui estão algumas boas referências: