Análise de covariância
Acompanhamento da aula da Professora Fernanda, publicada no dia 14/7/20 no Youtube:
https://www.youtube.com/watch?v=EyqkuCNgj2Y&ab_channel=FernandaPeres
dados <- data.frame(
stringsAsFactors = T,
Sujeito = c(1L,2L,3L,4L,5L,6L,7L,8L,
9L,10L,11L,12L,13L,14L,15L,16L,17L,18L,19L,
20L,21L,22L,23L,24L,25L,26L,27L,28L,29L,30L),
Gênero = c("M","F","M","M","F","F",
"M","M","M","M","F","F","F","F","F","M","M","M",
"F","M","M","F","F","F","M","F","F","M","M",
"F"),
Grau_Instrução = c("Superior","Superior",
"Superior","Ens Fundamental","Ensino Médio","Superior",
"Ens Fundamental","Superior","Superior","Ensino Médio",
"Superior","Ensino Médio","Ensino Médio","Ensino Médio",
"Ensino Médio","Superior","Superior","Superior",
"Ensino Médio","Ensino Médio","Ens Fundamental",
"Ens Fundamental","Ensino Médio","Superior","Ensino Médio",
"Ens Fundamental","Superior","Ens Fundamental","Superior",
"Superior"),
n_Filhos = c(1L,0L,0L,0L,0L,2L,0L,0L,
1L,2L,0L,3L,0L,0L,1L,1L,0L,0L,2L,2L,2L,0L,
0L,2L,4L,1L,1L,0L,0L,1L),
Idade = c(31L,25L,33L,20L,23L,37L,
38L,37L,34L,40L,41L,46L,26L,41L,43L,27L,26L,42L,
43L,30L,35L,33L,30L,32L,29L,40L,36L,34L,31L,
35L),
Salário = c(8.2,5.3,9.4,2.9,3.7,4.4,
4.7,5.4,5.8,3.2,6,6.9,2,3.4,3.7,4.2,6.4,11.6,
8.6,5.5,6.8,4.1,4.6,6.6,7.3,7.3,8.3,3.8,6.2,8)
)
summary(dados)
## Sujeito Gênero Grau_Instrução n_Filhos Idade
## Min. : 1.00 F:15 Ens Fundamental: 6 Min. :0.0000 Min. :20.00
## 1st Qu.: 8.25 M:15 Ensino Médio :10 1st Qu.:0.0000 1st Qu.:30.00
## Median :15.50 Superior :14 Median :0.5000 Median :34.00
## Mean :15.50 Mean :0.8667 Mean :33.93
## 3rd Qu.:22.75 3rd Qu.:1.7500 3rd Qu.:39.50
## Max. :30.00 Max. :4.0000 Max. :46.00
## Salário
## Min. : 2.000
## 1st Qu.: 4.125
## Median : 5.650
## Mean : 5.810
## 3rd Qu.: 7.200
## Max. :11.600
Neste exemplo, queremos analisar se o grau de instrução desses indivíduos tem efeito sobre os salários, controlando esse efeito pela idade.
Mas, primeiro, vamos analisar os pressupostos de uma análise de covariância. Neste banco temos como variável dependente a variável Salário, variável independente Grau de instrução e como covariável idade:
1 - vamos verificar se há efeito da variável independente sobre a covariável:
iniciamos com nossa hipótese nula \(H_0\): não há efeito da variável independente na covariável (p>0,05).
summary(aov(Idade ~ Grau_Instrução, data = dados))
## Df Sum Sq Mean Sq F value Pr(>F)
## Grau_Instrução 2 20.4 10.21 0.227 0.799
## Residuals 27 1215.4 45.02
Dessa forma, temos evidência para não rejeitar \(H_0\) e constatar que não há efeito do grau de instrução na idade.
2 - verificar se a relação entre a covariável e a variável dependente é linear (VD ~ cov)
ggplot2::ggplot(
dados,
ggplot2::aes(
x = Idade,
y = Salário,
group = Grau_Instrução,
color = Grau_Instrução
)
) +
ggplot2::geom_point(size = 2) +
ggplot2::geom_smooth(method = "lm", se = F, size = .5)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
3 - verificar se o efeito da covariável e o mesmo para todos os níveis da variável independente (VD ~ VI * cov). Vamos comparar as inclinações das retas para cada grupo da VI. Ou seja, se houver homogeineidade nos parâmetros da regressão, observaremos retas com inclinações parecidas.
summary(aov(Salário ~ Grau_Instrução*Idade, dados))
## Df Sum Sq Mean Sq F value Pr(>F)
## Grau_Instrução 2 28.01 14.005 3.779 0.0374 *
## Idade 1 18.47 18.470 4.984 0.0352 *
## Grau_Instrução:Idade 2 2.52 1.261 0.340 0.7150
## Residuals 24 88.95 3.706
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::Anova(aov(Salário ~ Grau_Instrução*Idade, dados), Type = "III")
## Anova Table (Type II tests)
##
## Response: Salário
## Sum Sq Df F value Pr(>F)
## Grau_Instrução 31.968 2 4.3130 0.02511 *
## Idade 18.470 1 4.9836 0.03518 *
## Grau_Instrução:Idade 2.522 2 0.3402 0.71501
## Residuals 88.946 24
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
É necessário que a interação entre grau de instrução e idade não seja significativo. Neste teste, vamos ter a \(H_0\) de que há homogeneidade dos parâmetros da regressão (p > 0.05).
4 - Verificar se há homogeneidade de variâncias (VD ~ VI)
car::leveneTest(Salário ~ Grau_Instrução, center = mean, dados)
## Levene's Test for Homogeneity of Variance (center = mean)
## Df F value Pr(>F)
## group 2 0.1854 0.8318
## 27
Temos que a \(H_0\) é que as variâncias são homogêneas (P>0.05).
5 - Ajustar o modelo de ANCOVA (VD ~ cov + VI)
car::Anova(aov(Salário ~ Idade + Grau_Instrução, data = dados), type = "III")
## Anova Table (Type III tests)
##
## Response: Salário
## Sum Sq Df F value Pr(>F)
## (Intercept) 0.629 1 0.1787 0.67596
## Idade 18.470 1 5.2501 0.03030 *
## Grau_Instrução 31.968 2 4.5436 0.02031 *
## Residuals 91.467 26
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Temos que a \(H_0\) é que não há efeito (p >.05). Neste caso, temos o efeito do grau de instrução controlado pela idade.
6 - Verificar a normalidade dos resíduos
shapiro.test(aov(Salário ~ Idade + Grau_Instrução, data = dados)$residuals)
##
## Shapiro-Wilk normality test
##
## data: aov(Salário ~ Idade + Grau_Instrução, data = dados)$residuals
## W = 0.96498, p-value = 0.4122
No teste de shapiro, temos que a \(H_0\) define a distribuição do dados como normal (p >0.05).
7 - Verificar se há homocedasticidade e outliers:
boxplot(aov(Salário ~ Idade + Grau_Instrução, data = dados)$residuals)
plot(aov(Salário ~ Idade + Grau_Instrução, data = dados), which = 1)
Neste gráfico vemos a distribuição dos resíduos. Se houver homocedasticidade (variância constante), veremos um padrão disperso (talvez mais retangular) dos resíduos. Quando o contrário, veríamos um funil.
Finalizo aqui os ensinamentos da Profa. Fernanda e espero que seja útil para vocês.
Bom trabalho!