Cómo hacemos para volver a la escala original una vez que hicimos una regresión con variables centradas y estandarizadas?
ejemplo:
set.seed(36)
n = 1000
a_origi = runif(1, -2,2)
b_origi = runif(1, -2,2)
sd = runif(1)
x = runif(n, 0, 5)
y = rnorm(n, a_origi + b_origi * x, sd )
plot(x, y)
abline(a_origi, b_origi)
Hacemos una regresión con la variable \(x\) centrada y estandarizada (como debe ser):
xs = scale(x)
fit = lm(y ~ xs)
print(fit)
##
## Call:
## lm(formula = y ~ xs)
##
## Coefficients:
## (Intercept) xs
## 2.2359 0.9795
Cómo hacemos para pasar las estimaciones de los coeficientes a la escala original?
Si lo único que nos importa es graficar los resultados, podemos usar este truco:
plot(x, y)
lines(x, fit$coefficients[1] + fit$coefficients[2] * xs)
La pendiente está ahora en unidades de desvÃo estándar, por lo que para recuperar la escala original tenemos que hacer
b_est = fit$coefficients[2] / sd(x)
La ordenada al origen está en la media de \(x\)
a_est = fit$coefficients[1] - mean(x) * b_est
graficamos
plot(x, y)
abline(a_est, b_est, col = 2)
Hagamos esto muchas veces para ver si funciona
n = 1000
nreps = 5000
adif = numeric(nreps)
bdif = numeric(nreps)
for(i in 1:nreps){
a_origi = runif(1, -2,2)
b_origi = runif(1, -2,2)
sd = runif(1)
x = runif(n, 0, 5)
y = rnorm(n, a_origi + b_origi * x, sd )
xs = scale(x)
fit = lm(y ~ xs)
b_est = fit$coefficients[2] / sd(x)
a_est = fit$coefficients[1] - mean(x) * b_est
adif[i] = a_est - a_origi
bdif[i] = b_est - b_origi
}
hist(adif, 100)
hist(bdif, 100)