12/10/2016
Hipótese: acreditamos que a altura média dos homens é maior do que a altura média das mulheres dentre os estudantes Universidade de Adelaide (Austrália)
Metodologia: obtivemos uma amostra aleatória de 209 estudantes e medimos a altura de cada um. Nessa amostra, a média de altura das mulheres foi de 165.6866667 cm; dos homens foi de 178.8260377 cm.
Pergunta: podemos concluir, com alto grau de confiança, que nossa hipótese sobre todos os estudantes da Universidade de Adelaide é verdadeira?
Para responder à pergunta, aplicamos o teste de t-Student sobre os valores dos dois grupos (alturas de homens e alturas de mulheres)
Obtemos assim um p-valor igual a 6.33817110^{-28}
Como o p-valor é menor do que 0.05, concluímos que nossa hipótese é verdadeira (com 95% de confiança)
(Adicionalmente, pode-se calcular o tamanho do efeito)
(demonstrar no R)
Considere uma população na qual a média de altura dos homens é exatamente igual à média de altura das mulheres.
Suponha que obtivemos uma amostra de homens e uma amostra de mulheres dessa população, e determinamos que, nessa amostra, a altura média das mulheres é 1 cm maior do que a altura média dos homens.
Nesse caso, é evidente que a diferença observada, de 1 cm, foi obra do acaso. Em outras amostras aleatórias, essa diferença pode diminuir ou até mesmo se inverter. Podemos até afirmar que, dada essa população, é alta a probabilidade de se obter ao acaso uma amostra cuja diferença de altura seja de 1 cm ou maior para as mulheres.
Quando aplicamos um teste de hipótese, buscamos mostrar que existe uma diferença entre duas populações; essa é nossa hipótese, chamada de hipótese alternativa (H1 ou Ha). Um cético poderia afirmar que não existe diferença; essa é a chamada hipótese nula (H0).
Na estatística, assumimos que a hipótese nula é verdadeira a menos que tenhamos uma evidência muito forte de que não é.
No nosso exemplo, a diferença entre a média de altura de homens e mulheres obtida na nossa amostra foi de 13.1393711 cm. O p-valor, nesse caso, é a probabilidade de se obter uma diferença igual ou superior a essa em duas amostras provenientes de populações com a mesma média.
Naturalmente, o p-valor vai depender da magnitude da diferença observada (quanto maior, menos provável que as amostras tenham vindo de populações com mesma média)…
… e da variância da população (quanto maior a variância, mais provável que as amostras tenham vindo de populações com a mesma média)
Os testes eventualmente podem levar a conclusões erradas:
Alguns testes que estudaremos:
t.test()
, wilcox.test()
- podem ser pareados ou não. wilcox.test()
também pode ser usado com variáveis ordinaisaov()
, kruskall.wallis()
- para múltiplas amostraschisq.test()
mcnemar.test()
- pareado# OBS.: conf.level = 1 - alfa. O padrão é 0.95 t.test(masc$Height, fem$Height, conf.level = 0.95)
## ## Welch Two Sample t-test ## ## data: masc$Height and fem$Height ## t = 12.924, df = 192.7, p-value < 2.2e-16 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## 11.13420 15.14454 ## sample estimates: ## mean of x mean of y ## 178.8260 165.6867
Teste T pode ser pensado como uma hipótese sobre a relação entre uma variável numérica e uma variável binária (categórica com 2 valores possíveis):
t.test(survey$Height ~ survey$Sex)
## ## Welch Two Sample t-test ## ## data: survey$Height by survey$Sex ## t = -12.924, df = 192.7, p-value < 2.2e-16 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -15.14454 -11.13420 ## sample estimates: ## mean in group Female mean in group Male ## 165.6867 178.8260
shapiro.test
e ks.test
(ou graficamente com um histograma ou um Q-Q plot)var.test
(ou graficamente com um Q-Q plot)H0: população possui distribuição normal
shapiro.test(masc$Height)
## ## Shapiro-Wilk normality test ## ## data: masc$Height ## W = 0.99175, p-value = 0.7719
shapiro.test(fem$Height)
## ## Shapiro-Wilk normality test ## ## data: fem$Height ## W = 0.98027, p-value = 0.1313
hist(masc$Height)
hist(fem$Height)
qqnorm(masc$Height) qqline(masc$Height)
qqnorm(fem$Height) qqline(fem$Height)
var.test(masc$Height, fem$Height)
## ## F test to compare two variances ## ## data: masc$Height and fem$Height ## F = 1.8557, num df = 105, denom df = 101, p-value = 0.001951 ## alternative hypothesis: true ratio of variances is not equal to 1 ## 95 percent confidence interval: ## 1.257430 2.734627 ## sample estimates: ## ratio of variances ## 1.855722
t.test
do R usa o teste T de Welch
Note a linha: "Welch Two Sample t-test"
t.test(survey$Height ~ survey$Sex)
## ## Welch Two Sample t-test ## ## data: survey$Height by survey$Sex ## t = -12.924, df = 192.7, p-value < 2.2e-16 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -15.14454 -11.13420 ## sample estimates: ## mean in group Female mean in group Male ## 165.6867 178.8260
Exemplo: a mão que escreve (Wr.Hnd
) e a outra mão (NW.Hnd
) possuem tamanhos diferentes, medidos da ponta do polegar à ponta do dedo mínimo?
hist(survey$Wr.Hnd - survey$NW.Hnd)
shapiro.test(survey$Wr.Hnd - survey$NW.Hnd)
## ## Shapiro-Wilk normality test ## ## data: survey$Wr.Hnd - survey$NW.Hnd ## W = 0.8757, p-value = 5.786e-13
A mão que escreve (Wr.Hnd
) e a outra mão (NW.Hnd
) possuem tamanhos diferentes, medidos da ponta do polegar à ponta do dedo mínimo?
(OBS.: nesse caso não devemos usar o teste T pois não atendemos ao pressuposto de normalidade!)
t.test(survey$Wr.Hnd, survey$NW.Hnd, paired=TRUE)
## ## Paired t-test ## ## data: survey$Wr.Hnd and survey$NW.Hnd ## t = 2.1268, df = 235, p-value = 0.03448 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## 0.006367389 0.166513967 ## sample estimates: ## mean of the differences ## 0.08644068
Resultado estatisticamente significativo nem sempre é significativo:
effsize
## Warning: package 'effsize' was built under R version 3.3.2
## ## Cohen's d ## ## d estimate: -1.782261 (large) ## 95 percent confidence interval: ## inf sup ## -2.105460 -1.459062
Número de testes executados é diferente comparando projetos em Java e em Ruby?
boxplot(builds100$tr_log_num_tests_run ~ builds100$gh_lang)
wilcox.test(builds100$tr_log_num_tests_run ~ builds100$gh_lang)
## Warning in wilcox.test.default(x = c(100L, 785L, 179L), y = c(189L, 3L, : ## cannot compute exact p-value with ties
## ## Wilcoxon rank sum test with continuity correction ## ## data: builds100$tr_log_num_tests_run by builds100$gh_lang ## W = 51, p-value = 0.4955 ## alternative hypothesis: true location shift is not equal to 0
boxplot(builds100$tr_log_num_tests_run ~ builds100$gh_lang)
Existe diferença entre o número de arquivos adicionados e o número de arquivos removidos em cada build?
boxplot(1+builds100$gh_diff_files_added, 1+builds100$gh_diff_files_modified, log="y")
wilcox.test(builds100$gh_diff_files_added, builds100$gh_diff_files_modified, paired=T)
## ## Wilcoxon signed rank test with continuity correction ## ## data: builds100$gh_diff_files_added and builds100$gh_diff_files_modified ## V = 30, p-value < 2.2e-16 ## alternative hypothesis: true location shift is not equal to 0
## Warning: package 'Hmisc' was built under R version 3.3.2
## Warning: package 'survival' was built under R version 3.3.2
## Warning: package 'Formula' was built under R version 3.3.2
## C Dxy n Missing ## 0.3777778 -0.2444444 48.0000000 0.0000000
paramétrico | não-paramétrico | |
---|---|---|
independentes | Teste T | Teste U (Mann-Whitney) |
pareados | Teste T pareado | Teste de Wilcoxon pareado |
Observações:
paramétrico | não-paramétrico | |
---|---|---|
independentes | t.test(...) |
wilcox.test(...) |
pareados | t.test(..., paired=T) |
wilcox.test(..., paired=T) |
A taxa de batimentos cardíacos depende da frequência de exercício dos alunos (frequente, algum, nenhum)?
summary(aov(survey$Pulse ~ survey$Exer))
## Df Sum Sq Mean Sq F value Pr(>F) ## survey$Exer 2 900 450.2 3.378 0.0362 * ## Residuals 189 25188 133.3 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## 45 observations deleted due to missingness
Considere os bugs de um projeto de software, que podem ser classificados quanto à severidade (severo ou não-severo) e prioridade (prioritário e não-prioritário). Podemos sumarizar os dados através de uma tabela de contingência 2x2:
bugs2 <- bugs %>% mutate(prioritario = priority %in% c('P1', 'P2'), severo = severity %in% c('blocker', 'critical', 'major')) tab <- xtabs(~ prioritario + severo, data=bugs2) tab
## severo ## prioritario FALSE TRUE ## FALSE 3471 16908 ## TRUE 511 6529
As duas variáveis (severidade e prioridade) são nominais. Será que elas são independentes? Podemos visualizar com um mosaic plot:
mosaicplot(tab, shade=T)
A distribuição dos status das builds depende da linguagem de programação? Status = canceled, errored, failed, passed ou started; linguagem = Java ou Ruby.
tab <- xtabs(~ gh_lang + tr_status, data=builds) tab
## tr_status ## gh_lang canceled errored failed passed ## java 540 10871 15647 73144 ## ruby 5804 20353 41073 130537
A distribuição dos status das builds depende da linguagem de programação? Status = canceled, errored, failed, passed ou started; linguagem = Java ou Ruby.
tab <- xtabs(~ gh_lang + tr_status, data=builds) chisq.test(tab)
## ## Pearson's Chi-squared test ## ## data: tab ## X-squared = 3216, df = 3, p-value < 2.2e-16
Existe dependência entre as variáveis binárias prioridade e severidade em bugs?
tab <- xtabs(~ prioritario + severo, data=bugs2) mcnemar.test(tab)
## ## McNemar's Chi-squared test with continuity correction ## ## data: tab ## McNemar's chi-squared = 15433, df = 1, p-value < 2.2e-16
## Loading required package: grid
## [1] 0.1211814
https://marcoarmello.wordpress.com/2012/05/17/qualteste/