Retransformação de Variáveis (1)

Raiz quadrada

Em um dos posts anteriores comentei brevemente sobre o problema da retransformação de variáveis. No último post mostrei algumas simulações sobre a retransformação de valores quando utiliza-se a transformação da variável dependente para a escala logarítmica.

Neste post, vou mostrar algumas simulações que fiz sobre o problema da retransformação quando utiliza-se a função raiz quadrada para a transformação da variável dependente.

Segundo Land (1972), quando esta transformação é aplicada a retransformação deve ser feita com a seguinte expressão (ver prova):

\[Y = \sqrt{X}; \mathbb{E}[X] = \mu^2 + \sigma^2\] Vamos ver, então, como fica a previsão de valores com um modelo ajustado com este tipo de dados.

Os dados foram criados, no R, com o código abaixo:

set.seed(1)
dados <- data.frame(
  Area = runif(100, min = 360, max = 600)
)
dados$SQRTVU <- 250 - .4*dados$Area + rnorm(100, mean = 0, sd = 12.5)
dados$VU <- dados$SQRTVU^2

Pode-se demonstrar que, se \(\sqrt{VU} \sim N(\mu, \sigma^2)\), então \(VU\) tem distribuição \(\chi^2\) generalizada, com 2 graus 1 grau de liberdade, parâmetro de não-centralidade \(\lambda = (\mu/\sigma)^2\), o que pode ser verificado com o código abaixo:

library(mosaic)
m <- mean(dados$SQRTVU)
s <- sd(dados$SQRTVU)
histogram(sqrt(s^2*rchisq(300, 1, ncp = (m/s)^2)))
plotDist("norm", mean = m, sd = s, add = TRUE)

Na prática, então, de posse de uma amostra, podemos testar:

  1. Se a raiz quadrada dos dados se ajusta à distribuição normal, como acima;
  2. Se os dados se ajustam a uma distribuição \(\chi^2\) generalizada, como ilustrado abaixo:
histogram(~VU/s^2, dados)
plotDist("chisq", df = 1, ncp = (m/s)^2, add = TRUE)

É boa prática utilizar a família de Box-Cox para verificar o melhor parâmetro para a transformação dos dados. Para isto, no R, podemos ajustar primeiro um modelo linear (sem transformacões):

linFit <- lm(VU~Area, dados)
summary(linFit)
## 
## Call:
## lm(formula = VU ~ Area, data = dados)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3316.2  -915.6  -204.2   663.1  6354.5 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 25092.353   1240.384   20.23   <2e-16 ***
## Area          -43.801      2.539  -17.25   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1623 on 98 degrees of freedom
## Multiple R-squared:  0.7522, Adjusted R-squared:  0.7497 
## F-statistic: 297.5 on 1 and 98 DF,  p-value: < 2.2e-16

Percebe-se na Figura 1 a presença de alguma não-linearidade no modelo.

Modelo linear.

Figure 1: Modelo linear.

E na Figura 2, o Poder de Predição do modelo linear. Percebe-se que o problema fica na estimação de valores nos extremos da escala (inclusive o modelo prevê alguns valores negativos).

powerPlot(linFit, axis = "inverted")
Poder de Predição para o modelo linear.

Figure 2: Poder de Predição para o modelo linear.

A Figura 3 mostra que o melhor parâmetro para transformação é, aproximadamente, 0.5. Ou seja, a transformação mais conveniente é a raiz quadrada.

library(car)
boxCox(linFit)
Ajuste do parâmetro de transformação para família de Box-Cox.

Figure 3: Ajuste do parâmetro de transformação para família de Box-Cox.

Ajusta-se o modelo, então, com a transformação adequada:

transFit <- lm(sqrt(VU)~Area, dados)
s <- summary(transFit)
s
## 
## Call:
## lm(formula = sqrt(VU) ~ Area, data = dados)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -23.122  -7.028  -1.088   6.553  31.458 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 241.90200    8.99258   26.90   <2e-16 ***
## Area         -0.38373    0.01841  -20.84   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.76 on 98 degrees of freedom
## Multiple R-squared:  0.816,  Adjusted R-squared:  0.8141 
## F-statistic: 434.5 on 1 and 98 DF,  p-value: < 2.2e-16

E verifica-se o poder de predição.

Primeiro com a simples retransformação pela função inversa (naive), que leva à mediana da distribuição. Percebe-se que, devido à transformação, não são previstos mais quaisquer valores negativos, o que é desejável.

powerPlot(transFit, axis = "inverted", func = "sqrt")
Poder de predição com retransformação \emph{naive}

Figure 4: Poder de predição com retransformação

Depois com o valor esperado (ou média) da distribuição:

yhatMedia <- fitted(transFit)^2 + s$sigma^2
powerPlot(dados$VU, yhatMedia, axis = "inverted")
Poder de predição com a média.

Figure 5: Poder de predição com a média.

Mais uma vez: a estimação foi realizada com a minimização da função erro médio quadrático (MSE), já que foi utilizada a regressão linear. Mas não necessariamente deve ser utilizada a média para a previsão de valores.

Na regressão à mediana o problema da retransformação desaparece: o quantil da variável transformada corresponde ao mesmo quantil da variável original, já que a transformação foi feita com uma função monótona (ver Koenker e Basset (1978, p.39-40)).

Desta forma, pode-se aplicar a regressão quantílica e depois simplesmente retransformar os valores previstos com a função inversa, obtendo-se o mesmo quantil estimado.

(A regressão quantílica não pressupõe normalidade, porém a transformação possibilita a previsão de valores sempre positivos).

library(quantreg)
medFit <- rq(sqrt(VU)~Area, dados, tau = .5)
powerPlot(medFit, axis = "inverted", func = "sqrt")

Avatar
Luiz F. P. Droubi
Mestrando no Programa de Pós-Graduação em Engenharia de Transportes e Gestão Territorial

comments powered by Disqus