Tranformação de dados é uma das possíveis formas de contarnar o problema de dados que não obedecem os pressupostos da análise de variância. Vamos ver como isto poder ser feito com o programa R.
Considere o seguinte exemplo da apostila do curso.
Trat | Repetições | |||||
1 | 2 | 3 | 4 | 5 | 6 | |
1 | 2370 | 1687 | 2592 | 2283 | 2910 | 3020 |
2 | 1282 | 1527 | 871 | 1025 | 825 | 920 |
3 | 562 | 321 | 636 | 317 | 485 | 842 |
4 | 173 | 127 | 132 | 150 | 129 | 227 |
5 | 193 | 71 | 82 | 62 | 96 | 44 |
Inicialmente vamos entrar com os dados usando 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
A seguir vamos fazer ajustar o modelo e inspecionar os resíduos.
tr.av <- aov(resp ~ trat, data=tr) plot(tr.av)
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 normal.
A menssagem é clara mas podemos ainda fazer testes 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.939, p-value = 0.08535
Nos resultados acima vemos que a homogeneidade de variâncias foi rejeitada.
Para tentar contornar o problema vamos usar a transformação Box-Cox, que consiste em transformar os dados de acordo com a expressão
A função boxcox do pacote MASS calcula a verossimilhança perfilhada do parâmetro . Devemos escolher o valor que maximiza esta função.
Nos comandos a seguir começamos carregando o pacote MASS e depois obtemos o gráfico da verossimilhança perfilhada.
Como estamos interessados no máximo fazermos um novo gráfico com um zoom na região de interesse.
require(MASS) boxcox(resp ~ trat, data=tr, plotit=T) boxcox(resp ~ trat, data=tr, lam=seq(-1, 1, 1/10))
O gráfico mostra que o valor que maximiza a função é aproximadamente
.
Desta forma o próximo passo é obter os dados transformados e depois fazer as análise utilizando estes novos dados.
tr$respt <- (tr$resp^(0.1) - 1)/0.1 tr.avt <- aov(respt ~ trat, data=tr) plot(tr.avt)
Note que os resíduos tem um comportamento bem melhor do que o observado para os dados originais. A análise deve prosseguir usando então os dados transformados.
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 bom próximos dos obtidos com a transformação préviamente adotada.
tr.avl <- aov(log(resp) ~ trat, data=tr) plot(tr.avl)