knitr::opts_chunk$set(echo = TRUE)
Uma questão muito importante quando aplicamos Análise de Variância em nossos dados é que os mesmos devem atender alguns pressupostos para que a análise nos forneça resultados confiáveis. São eles:
Esse parâmetro é muito importante, pois pressupõe que os resíduos apresentem variâncias estatisticamente iguais entre os diferentes tratamentos aplicados as unidades experimentais. Caso os resíduos apresentem heterocedasticidade, a análise de variância será influenciada, em especial no cálculo dos mínimos quadrados.
Esse outro parâmetro pressupõe que os resíduos apresentem normalidade. Caso não apresentem, as estimativas obtidas pela análise de variância não serão eficientes, tendo em vista que a distribuição em análise tem maior erro padrão. Uma alternativa para minimizar esse problema é transformando os dados brutos aplicando transformadas matemáticas, como por exemplo raiz quadrada, logaritmo, aplicando funções trigonométricas, etc.
Esse outro parâmetro significa que não há correlação entre os resíduos, ou seja, um dado tem efeito nulo sobre outro. Se isso não ocorrer, significa dizer que há vício de coleta de dados, o que contribui para aumento de erro padrão e ineficiência nos resultados obtidos pela análise de variância.
Para a homocedasticidade podemos aplicar dois testes para verificar a homogeneidade entre as variâncias: O teste de Barlett e o de Levene.
Vamos utilizar um conjunto de dados para aplicar esses testes. Para aplicação destes testes devemos considerar duas hipóteses:
library(readxl)
homogeneidade <- read_excel("~/Documentos/ESTATÍSTICA INDUSTRIAL/mercurio.xls")
head(homogeneidade)
## # A tibble: 6 x 2
## Grupo Quantidade
## <chr> <dbl>
## 1 garimpeiros 24
## 2 garimpeiros 19
## 3 garimpeiros 25
## 4 garimpeiros 23
## 5 garimpeiros 13
## 6 ribeirinhos 16
modelo<-aov(Quantidade~Grupo, data = homogeneidade)
names(modelo)
## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "contrasts" "xlevels" "call" "terms"
## [13] "model"
coef(modelo)
## (Intercept) Grupogarimpeiros Grupoindios Gruporibeirinhos
## 8.4 12.4 16.0 2.8
Aplicando o teste de Barlett
bartlett.test(Quantidade~Grupo, data = homogeneidade)
##
## Bartlett test of homogeneity of variances
##
## data: Quantidade by Grupo
## Bartlett's K-squared = 2.0415, df = 3, p-value = 0.5638
Observa-se que o valor de p foi maior que 0,05, ou seja, rejeita-se a hipótese alternativa e aceita-se a hipótese nula. Podemos concluir que há homogeneidade entre as variâncias.
Vamos agora aplicar outro teste chamado de Levene. Para isso, deve-se utilziar os seguintes comandos:
require(car)
## Loading required package: car
## Loading required package: carData
leveneTest(modelo)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0.4735 0.705
## 16
Podemos observar que tanto o teste de Bartlett quanto o de Levene apresentaram p>0,05, o que nos indica que devemos aceitar a hipótese nula e rejeitar a hipótese alternativa. Isso significa dizer que há homogeneidade entre as variâncias.
Vamos agora testar a normalidade dos resíduos. Mas como conseguimos calcular os resíduos???
\(R_{ij}=x_{ij}-\bar{x}_i\)
Vamos pegar e calcular um resíduo a fim de demonstrar como é feito. voltando aos dados
homogeneidade
## # A tibble: 20 x 2
## Grupo Quantidade
## <chr> <dbl>
## 1 garimpeiros 24
## 2 garimpeiros 19
## 3 garimpeiros 25
## 4 garimpeiros 23
## 5 garimpeiros 13
## 6 ribeirinhos 16
## 7 ribeirinhos 8
## 8 ribeirinhos 10
## 9 ribeirinhos 7
## 10 ribeirinhos 15
## 11 indios 28
## 12 indios 30
## 13 indios 19
## 14 indios 23
## 15 indios 22
## 16 controle 12
## 17 controle 6
## 18 controle 8
## 19 controle 7
## 20 controle 9
Vamos calcular a média do grupo garimpeiros. Sabendo que a mesma é dada pelo valor de 20,8
Calculando o 1° resíduo: $ 24-20,8= 3,2$
Podemos fazer o cálculo de todos os resíduos utilizando o R
residuos<-residuals(modelo)
residuos
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
## 3.2 -1.8 4.2 2.2 -7.8 4.8 -3.2 -1.2 -4.2 3.8 3.6 5.6 -5.4 -1.4 -2.4 3.6
## 17 18 19 20
## -2.4 -0.4 -1.4 0.6
Se quisermos calcular os resíduos padronizados. Resíduo padronizado é igual ao valor de um resíduo dividido por uma estimativa de seu desvio padrão.
res_Stud <- rstandard(modelo)
res_Stud
## 1 2 3 4 5 6 7
## 0.8774536 -0.4935676 1.1516578 0.6032493 -2.1387931 1.3161804 -0.8774536
## 8 9 10 11 12 13 14
## -0.3290451 -1.1516578 1.0419761 0.9871353 1.5355438 -1.4807029 -0.3838859
## 15 16 17 18 19 20
## -0.6580902 0.9871353 -0.6580902 -0.1096817 -0.3838859 0.1645225
Podemos fazer ainda uma avaliação gráfica dos resíduos padronizados para verificar a presença de outliers.
boxplot(res_Stud)
Podemos observar que não verificamos a presença de outliers no gráfico, o que é um bom sinal para darmos sequência nas análises dos pressupostos.
require(lattice)
## Loading required package: lattice
dotplot(res_Stud~Grupo, homogeneidade, ylab="Resíduos
Studentizados", xlab="Grupo")
Podemos agora realizar a análise de normalidade nos resíduos. Para isso vamos aplicar três testes de normalidade. Para isso vamos instalar e carregar o pacote “nortest”.
require(nortest)
## Loading required package: nortest
O teste Lilliefors é uma adaptação do teste de Kolmogorov-Smirnov. O mesmo mede a diferença máxima absoluta entre a função de distribuição acumulada empírica e teórica. ParaAplicando o teste de Lilliefors.
lillie.test(modelo$residuals)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo$residuals
## D = 0.15379, p-value = 0.2465
Esse teste foi proposto por Shapiro e Wilk em 1965. O mesmo é muito utilizado para determinação da normalidade dos resíduos.
shapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.95087, p-value = 0.3805
Aplicando o teste de Anderson Darling sobre os resíduos.
ad.test(modelo$residuals)
##
## Anderson-Darling normality test
##
## data: modelo$residuals
## A = 0.41859, p-value = 0.2971
Precisamos testar outro pressuposto que é a independência dos resíduos, ou seja, não podem ser autocorrelacionados. Sendo assim, para que possamos fazer uma análise da variância, é preciso pressupor que os erros são variáveis aleatórias independentes. Mas o que significa pressupor que os erros são variáveis aleatórias independentes?
Vamos pensar num exemplo: Se formos repetir análises em uma mesma unidade experimental, podemos dizer que há correlação e que não pode-se pressupor independência entre os resíduos. Quando não independência, a Análise de variância fica seriamente comprometida. Inicialmente podemos nos valer de uma análise gráfica dos resíduos. Em os resíduos ficando dispersos em torno do zero sem um padrão definido, podemos dizer que a suposição de independência foi atendida. Ao contrário, quando desconfia-se pela análise gráfica que há uma correlação dos resíduos, podemos proceder a um teste de hipótese a fim de verificar de maneira mais contundente a não independência daos resíduos. Esse teste se chama Durbin-Watson.
Através deste teste conseguimos verificar a autocorrelação entre os resíduos. As seguintes hipóteses são testadas:
Aplicando o teste:
lmtest::dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 2.5857, p-value = 0.7522
## alternative hypothesis: true autocorrelation is greater than 0