Você deve centralizar os termos envolvidos na interação para reduzir a colinearidade, por exemplo
set.seed(10204)
x1 <- rnorm(1000, 10, 1)
x2 <- rnorm(1000, 10, 1)
y <- x1 + rnorm(1000, 5, 5) + x2*rnorm(1000) + x1*x2*rnorm(1000)
x1cent <- x1 - mean(x1)
x2cent <- x2 - mean(x2)
x1x2cent <- x1cent*x2cent
m1 <- lm(y ~ x1 + x2 + x1*x2)
m2 <- lm(y ~ x1cent + x2cent + x1cent*x2cent)
summary(m1)
summary(m2)
Resultado:
> summary(m1)
Call:
lm(formula = y ~ x1 + x2 + x1 * x2)
Residuals:
Min 1Q Median 3Q Max
-344.62 -66.29 -1.44 66.05 392.22
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 193.333 335.281 0.577 0.564
x1 -15.830 33.719 -0.469 0.639
x2 -14.065 33.567 -0.419 0.675
x1:x2 1.179 3.375 0.349 0.727
Residual standard error: 101.3 on 996 degrees of freedom
Multiple R-squared: 0.002363, Adjusted R-squared: -0.0006416
F-statistic: 0.7865 on 3 and 996 DF, p-value: 0.5015
> summary(m2)
Call:
lm(formula = y ~ x1cent + x2cent + x1cent * x2cent)
Residuals:
Min 1Q Median 3Q Max
-344.62 -66.29 -1.44 66.05 392.22
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 12.513 3.203 3.907 9.99e-05 ***
x1cent -4.106 3.186 -1.289 0.198
x2cent -2.291 3.198 -0.716 0.474
x1cent:x2cent 1.179 3.375 0.349 0.727
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 101.3 on 996 degrees of freedom
Multiple R-squared: 0.002363, Adjusted R-squared: -0.0006416
F-statistic: 0.7865 on 3 and 996 DF, p-value: 0.5015
library(perturb)
colldiag(m1)
colldiag(m2)
A decisão de centralizar outras variáveis depende de você; centralizar (em oposição à padronização) uma variável que não está envolvida em uma interação mudará o significado da interceptação, mas não outras coisas, por exemplo
x1 <- rnorm(1000, 10, 1)
x2 <- x1 - mean(x1)
y <- x1 + rnorm(1000, 5, 5)
m1 <- lm(y ~ x1)
m2 <- lm(y ~ x2)
summary(m1)
summary(m2)
Resultado:
> summary(m1)
Call:
lm(formula = y ~ x1)
Residuals:
Min 1Q Median 3Q Max
-16.5288 -3.3348 0.0946 3.4293 14.0678
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 6.5412 1.6003 4.087 4.71e-05 ***
x1 0.8548 0.1591 5.373 9.63e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.082 on 998 degrees of freedom
Multiple R-squared: 0.02812, Adjusted R-squared: 0.02714
F-statistic: 28.87 on 1 and 998 DF, p-value: 9.629e-08
> summary(m2)
Call:
lm(formula = y ~ x2)
Residuals:
Min 1Q Median 3Q Max
-16.5288 -3.3348 0.0946 3.4293 14.0678
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 15.0965 0.1607 93.931 < 2e-16 ***
x2 0.8548 0.1591 5.373 9.63e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.082 on 998 degrees of freedom
Multiple R-squared: 0.02812, Adjusted R-squared: 0.02714
F-statistic: 28.87 on 1 and 998 DF, p-value: 9.629e-08
Mas você deve fazer log de variáveis porque faz sentido fazê-lo ou porque os resíduos do modelo indicam que você deveria, não porque eles têm muita variabilidade. A regressão não faz suposições sobre a distribuição das variáveis, faz suposições sobre a distribuição dos resíduos.
y <- x1 + rnorm(1000, 5, 5) + x2*rnorm(1000) + x1*x2*rnorm(1000)