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)