© Ricardo Solar/UFMG - compartilhamento e utilização não-comercial livres. Não reproduzir sem autorização >http://doi.org/10.5281/zenodo.7392285
Neste exercício, faremos um teste T e um teste F do início ao fim, manualmente. Naturalmente, o teste F é feito com um único comando no R, e faremos isso ao final. O objetivo desse exercício é entender cada um dos passos que compõem esse teste, entendendo de onde sai cada um dos valores.
Senhora <- 1:20
Resultado <- c(6,1,3,5.5,5,2.5,2,2,5,6,5.5,3,2,4,1,4,1,1,4,5)
Riqueza <- c("Com_carro",
rep("Sem_carro", 2),
rep("Com_carro", 2),
rep("Sem_carro", 3),
rep("Com_carro",3),
rep("Sem_carro", 8),
"Com_carro")
(meusdados <- data.frame(Senhora, Resultado, Riqueza, stringsAsFactors = T))
A fórmula do teste T é bastante simples, sendo ela:
\[t=\frac{\bar{x_1}-\bar{x_2}}{\sqrt{ \frac{\sigma^2_1}{n_1} + \frac{\sigma^2_2}{n_2} }}\], onde:
\(t\) = valor do teste t
\(x_1\) = média da amostra 1
\(x_2\) = média da amostra2
\(\sigma^2_1\) = variância da amostra 1
\(\sigma^2_2\) = variância da amostra 2
\(n_1\) = tamanho da amostra 1
\(n_2\) = tamanho da amostra 2
Fazendo as contas:
amostra1 <- dplyr::filter(meusdados, Riqueza=="Com_carro")
amostra2 <- dplyr::filter(meusdados, Riqueza=="Sem_carro")
media1 <- mean(amostra1$Resultado)
media2 <- mean(amostra2$Resultado)
s1 <- var(amostra1$Resultado)
s2 <- var(amostra2$Resultado)
n1 <- nrow(amostra1)
n2 <- nrow(amostra2)
(valor_t <- (media1-media2)/sqrt((s1/n1)+(s2/n2)))
## [1] 8.361036
t.test(Resultado~Riqueza, data=meusdados)
##
## Welch Two Sample t-test
##
## data: Resultado by Riqueza
## t = 8.361, df = 16.894, p-value = 2.085e-07
## alternative hypothesis: true difference in means between group Com_carro and group Sem_carro is not equal to 0
## 95 percent confidence interval:
## 2.304232 3.860604
## sample estimates:
## mean in group Com_carro mean in group Sem_carro
## 5.428571 2.346154
Para fazermos o teste F, precisamos calcular:
O valor de F que estamos buscando é: \(F=\frac{\frac{SQ_{trat}}{gl_{trat}}}{\frac{SQ_{res}}{gl_{res}}}\), onde:
\[SQ_{tot}=\sum_{1}^{n}{xi-\bar{x}} \]
&
\[SQ_{res}=\sum_{1}^{n_a}{(x_ai-\bar{x_a})} + \sum_{1}^{n_b}{(x_bi-\bar{x_b})} \]
Vamos aos cálculos:
mediageral <- mean(meusdados$Resultado)
y <- meusdados$Resultado
(desviostot <- (y-mediageral))
## [1] 2.575 -2.425 -0.425 2.075 1.575 -0.925 -1.425 -1.425 1.575 2.575
## [11] 2.075 -0.425 -1.425 0.575 -2.425 0.575 -2.425 -2.425 0.575 1.575
Graficamente, os desvios para a média geral são representados assim:
Agora calculamos os quadrados desse desvio:
(sqtot <- sum(desviostot^2))
## [1] 61.1375
Que graficamente aparecem assim:
Graficamente, essa é a representação da Soma de quadrados dos desvios.
xy2 <- dplyr::arrange(meusdados, Riqueza)
ypred <- with(meusdados, tapply(Resultado, Riqueza, mean))
(desviosres <- ifelse(xy2$Riqueza=="Com_carro", xy2$Resultado-ypred[1], xy2$Resultado-ypred[2]))
## [1] 0.57142857 0.07142857 -0.42857143 -0.42857143 0.57142857 0.07142857
## [7] -0.42857143 -1.34615385 0.65384615 0.15384615 -0.34615385 -0.34615385
## [13] 0.65384615 -0.34615385 1.65384615 -1.34615385 1.65384615 -1.34615385
## [19] -1.34615385 1.65384615
(sqerro <- sum(desviosres^2))
## [1] 17.90659
(sqefeito <- sqtot-sqerro)
## [1] 43.23091
#QMTrat
QMefeito <- sqefeito/1 ##Variancia entre
##QMres
QMerro <- sqerro/18 ##Variancia dentro
##F
(F_ratio <- QMefeito/QMerro)
## [1] 43.45641
##F-critico
qf(p = 0.95, df1 = 1, df2 = 18)
## [1] 4.413873
Basta usarmos o comando aov, que significa analysis of variance.
aov(Resultado~Riqueza, data=meusdados)
| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| Riqueza | 1 | 43.23091 | 43.2309066 | 43.45641 | 3.4e-06 |
| Residuals | 18 | 17.90659 | 0.9948107 | NA | NA |
Portanto, vemos que para ambos os testes (T e F), comparamos médias de dois grupos. No primeiro caso, o interesse era a comparação direta das médias, enquanto no Teste F, o objetivo é compreender quanto um tratamento reduz a variância não explicada (Resíduo). Fizemos tudo passo a passo, mas ao final vimos que os comandos t.test e aov fazem essas análises de maneira bem direta, facilitando bem nosso trabalho.
Nas próximas lições, começaremos com uma tabela pré-existente, ou seja, não precisaremos construí-la manualmente no R.