22 Transformação de dados

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.



Tabela 4: Número de reclamações em diferentes sistemas de atendimento
Repetições







Trat
1 2 3 4 5 6







1 237016872592228329103020
2 12821527 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

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 menssagem é 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.8961, 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λ - 1
y′ = ------,
       λ
onde λ é um parâmeto a ser estimado dos dados. Se λ = 0 a equação acima se reduz a
y ′ = log(y),
onde log é o logarítmo neperiano. Uma vez obtido o valor de λ 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 λ. 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))


PIC


Figura 49: Perfis de verossimilhança para o parâmetro λ da transformação Box-Cox


O gráfico mostra que o valor que maximiza a função é aproximadamente ˆλ = 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

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


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 0 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)


PIC

Figura 51: Gráficos de diagnóstico para dados com transformação logarítmica