Os objetivos desta aula são analisar um conjunto de dados que apresentam problemas com relação aos pressupostos e como resolver essa situação.
Tranformação de dados é uma das possíveis formas de contornar o problema de dados que não obedecem aos pressupostos da análise de variância. Isso poder ser feito com relativa facilidade no programa R.
Considere o seguinte exemplo da página 64 das notas de aula do curso. Os dados referem-se ao número de falhas eletrônicas em diferentes sistemas de atendimento telefônico no período de um ano de funcionamento (Delineamento completamente asualizado).
Uma maneira alternativa de entrar com os dados é utilizando a função scan e montar um data-frame.
y <- scan() 1: 2370 2: 1687 3: 2592 ... 30: 44 31: Read 30 items tr <- data.frame(trat = rep(1:5, each=6), resp = y) tr
Lembre-se que trat precisa ser inserido como uma variável não numérica
tr$trat<-as.factor(tr$trat)
A seguir ajusta-se o modelo e inspecionam-se os resíduos.
##Anova tr.av <- aov(resp ~ trat, data=tr) tr.av anova(tr.av) ##Homocedasticidade plot.default(tr$trat,tr.av$res) ##Normalidade qqnorm(tr.av$res,ylab="Residuos", main=NULL) qqline(tr.av$res) title("Grafico Normal de Probabilidade dos Resíduos")
O gráfico de resíduos vs valores preditos mostra claramente uma heterogeneidade de variâncias e o
mostra um comportamento dos dados que se afasta muito da distribuição normal. A menssagem
é clara mas testes podem ser feitos para verificar o desvio dos pressupostos.
bartlett.test(tr$resp, tr$trat) Bartlett test for homogeneity of variances data: tr$resp and tr$trat Bartlett's K-squared = 29.586, df = 4, p-value = 5.942e-06 shapiro.test(tr.av$res) Shapiro-Wilk normality test data: tr.av$res W = 0.8961, p-value = 0.006742
Nos resultados acima a homogeneidade de variâncias foi rejeitada e também a normalidade dos resíduos.
Para tentar contornar o problema utiliza-se a transformação Box-Cox, que consiste em transformar os dados de acordo com a expressão
onde é um parâmeto a ser estimado dos dados. Se
a equação acima se reduz a
onde é o logarítmo neperiano. Uma vez obtido o valor de
encontra-se os valores dos
dados transformados conforme a equação acima e utiliza-se estes dados transformados para efetuar as
análises.
A função boxcox do pacote MASS calcula a verossimilhança perfilhada do parâmetro . Deve-se
escolher o valor que maximiza esta função. Nos comandos a seguir inicia-se carregando o pacote MASS
e depois obtém-se o gráfico da verossimilhança perfilhada. Neste caso, é de interesse obter o valor
máximo de
. Um gráfico com um zoom na região de interesse fornece esse valor.
require(MASS) box.tr<-boxcox(resp ~ trat, data=tr, plotit=T) box.tr<-boxcox(resp ~ trat, data=tr, lam=seq(-1, 1, 1/10))
O gráfico mostra que o valor que maximiza a função é aproximadamente
.
Abaixo, uma forma de se obter o valor exato de
Transformação BOX-COX
lambda <- box.tr$x[which(box.tr$y == max(box.tr$y))] lambda [1] 0.1919192
Desta forma o próximo passo é obter os dados transformados e depois realizar as análises utilizando estes novos dados.
tr$respt <- tr$resp^(lambda) tr.avt <- aov(respt ~ trat, data=tr)
Note que os resíduos tem um comportamento bem melhor do que o observado para os dados originais. A análise deve prosseguir utilizando-se então os dados transformados.
bartlett.test(tr$respt, tr$trat) shapiro.test(tr.avt$res)
NOTA: No gráfico da verossimilhança perfilhada notamos que é mostrado um intervalo de confiança
para e que o valor
está contido neste intervalo. Isto indica que podemos utilizar a
transformação logarítimica dos dados e os resultados serão bem próximos dos obtidos com a
transformação previamente adotada.
tr.avl <- aov(log(resp) ~ trat, data=tr) plot(tr.avl)
Adilson dos Anjos 2006-04-17