22 Transformação de dados

Transformação de dados é uma das possíveis formas de contornar 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.

Tabela 4: Número de reclamações em diferentes sistemas de atendimento
Repetições
Trat
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 scan() e montar um data-frame.

> y <- scan()
1: 2370
2: 1687
3: 2592
...
30: 44
31:
Read 30 items

> tr <- data.frame(trat = factor(rep(1:5, each=6)), resp = y) 
> str(tr)
'data.frame':        30 obs. of  2 variables: 
 $ trat: Factor w/ 5 levels "1","2","3","4",..: 1 1 1 1 1 1 2 2 2 2 ... 
 $ resp: num  2370 1687 2592 2283 2910 ...

A seguir vamos fazer ajustar o modelo e inspecionar os resíduos.

> tr.av <- aov(resp ~ trat, data=tr) 
> plot(tr.av)

PIC

PIC

PIC

PIC

PIC

Figura 48: Gráficos de diagnóstico para dados originais

O gráfico de resíduos vs valores preditos mostra claramente uma heterogeneidade de variâncias e o \(QQ-plot\) mostra um comportamento dos dados que se afasta muito da normal. A mensagem é clara mas podemos ainda fazer testes para verificar o desvio dos pressupostos.

> bartlett.test(tr$resp, tr$trat)
 
        Bartlett test of 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.89608, p-value = 0.006742

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 \[y' = \frac {y^\lambda - 1}{\lambda },\] onde \(\lambda \) é um parâmetro a ser estimado dos dados. Se \(\lambda = 0\) a equação acima se reduz a \[y' = \log (y),\] onde \(\log \) é o logaritmo neperiano. Uma vez obtido o valor de \(\lambda \) encontramos os valores dos dados transformados conforme a equação acima e utilizamos estes dados transformados para efetuar as análises.

A função boxcox() do pacote MASS calcula a verossimilhança perfilhada do parâmetro \(\lambda \). 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))

Carregando pacotes exigidos: MASS

PIC

Figura 49: Perfis de verossimilhança para o parâmetro \(\lambda \) da transformação Box-Cox

O gráfico mostra que o valor que maximiza a função é aproximadamente \(\hat {\lambda } = 0.1\). 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)

PIC

PIC

PIC

PIC

PIC

Figura 50: Gráficos de diagnóstico para dados transformados

Note que os resíduos têm 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 \(\lambda \) e que o valor \(0\) está contido neste intervalo. Isto indica que podemos utilizar a transformação logarítmica 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)

PIC

PIC

PIC

PIC

PIC

Figura 51: Gráficos de diagnóstico para dados com transformação logarítmica
Carregando pacotes exigidos: mgcv
Carregando pacotes exigidos: nlme
This is mgcv 1.9-4. For overview type '?mgcv'.