7. Análisis de regresión
En este ejemplo haremos uso de la base de datos mtcars para evaluar el siguiente modelo de regresión:
mpg = b0 + b1(hp) + b2(wt) + b3(am) + e
El resultado que SPSS provee al evaluar este modelo es:

En R se hace uso de la función lm() para realizar análisis de regresión. El argumento principal de esta función es una fórmula que especifica el modelo a evaluar. En este ejemplo el argumento tiene la siguiente forma:
mpg~hp+wt+am
Note el uso de la tilde (‘~’) para separar la variable dependiente, mpg, de las independientes. Preste atención también al uso del símbolo de suma para separar las variables independientes. Para evaluar el modelo en R se utiliza el comando:
lm(mpg~hp+wt+am)
El resultado que se obtiene al ejecutar este comando es:
Call:
lm(formula = mpg ~ hp + wt + am)
Coefficients:
(Intercept) hp wt am
34.00288 -0.03748 -2.87858 2.08371
Puede obtener una tabla de resultados más completa si le aplica la función ‘summary()’ al comando anterior:
summary(lm(mpg~hp+wt+am))
Ahora el resultado es:
Call:
lm(formula = mpg ~ hp + wt + am)
Residuals:
Min 1Q Median 3Q Max
-3.4221 -1.7924 -0.3788 1.2249 5.5317
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 34.002875 2.642659 12.867 2.82e-13 ***
hp -0.037479 0.009605 -3.902 0.000546 ***
wt -2.878575 0.904971 -3.181 0.003574 **
am 2.083710 1.376420 1.514 0.141268
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.538 on 28 degrees of freedom
Multiple R-squared: 0.8399, Adjusted R-squared: 0.8227
F-statistic: 48.96 on 3 and 28 DF, p-value: 2.908e-11
Note que R no presenta la tabla de ANOVA como hace SPSS. Sin embargo, en la última línea se incluye la información sobre la estadística F para evaluar la significancia del modelo. En la penúltima línea se presenta la información sobre R2, R2 ajustado y el error estándar del estimado que SPSS coloca en la primera tabla. El resultado de R provee, además, información básica sobre los residuos (valores máximo y mínimo y los cuartilos).
En R la forma de especificar el modelo es flexible y muy conveniente cuando se desea evaluar un modelo no lineal. Por ejemplo, si quisiéramos hacer una transformación logarítmica de las variables hp y wt, basta con escribir:
summary(lm(mpg~log(hp)+log(wt)+am))
Con el siguiente resultado:
Call:
lm(formula = mpg ~ log(hp) + log(wt) + am)
Residuals:
Min 1Q Median 3Q Max
-2.7354 -1.5379 -0.5651 1.2045 4.6573
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 58.1019 4.4914 12.936 2.48e-13 ***
log(hp) -5.4955 1.2656 -4.342 0.000167 ***
log(wt) -10.2355 2.5679 -3.986 0.000436 ***
am 0.7351 1.1874 0.619 0.540858
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
De la misma manera, se pueden incluir otras transformaciones (raíz cuadrada, potencias, etc.). Para incluir la interacción entre dos variables, A y B, basta con añadir el término A:B en la fórmula. Como alternativa, puede utilizar como modelo A*B. Es decir, lm(y=A*B) es equivalente a lm(y=A+B+A:B).
Coeficientes estandarizados
La tabla básica incluye los coeficientes de regresión no estandarizados. Para obtener los valores estandarizados, puede estandarizar cada variable del modelo haciendo uso de función scale():
lm(scale(mpg)~scale(hp)+scale(wt)+scale(am))
En este caso el resultado será:
Call:
lm(formula = scale(mpg) ~ scale(hp) + scale(wt) + scale(am))
Residuals:
Min 1Q Median 3Q Max
-0.56779 -0.29739 -0.06285 0.20324 0.91783
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.348e-17 7.443e-02 0.000 1.000000
scale(hp) -4.264e-01 1.093e-01 -3.902 0.000546 ***
scale(wt) -4.673e-01 1.469e-01 -3.181 0.003574 **
scale(am) 1.725e-01 1.140e-01 1.514 0.141268
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.421 on 28 degrees of freedom
Multiple R-squared: 0.8399, Adjusted R-squared: 0.8227
F-statistic: 48.96 on 3 and 28 DF, p-value: 2.908e-11
Gráficas de diagnóstico
El comando plot() se puede utilizar para obtener algunas gráficas de diagnóstico del modelo de regresión. Para utilizarlo, es necesario incluir como argumento de esta función el modelo en cuestión. La función lm() tiene la información para producir cuatro de estas gráficas de diagnóstico. Para presentarlas todas en una sola imagen, podemos utilizar la función par(). El argumento de esta función es el número de filas y columnas en las que se dividirá la gráfica. Los comandos entonces serían:
par(2,2)
plot(lm(mpg~hp+wt+am))
El resultado será la siguiente gráfica:

La primera gráfica a la izquierda permite evaluar visualmente si se cumple el supuesto de heteroscedasticidad; la segunda permite evaluar si el supuesto de normalidad se cumple. Las últimas dos gráficas permiten determinar si hay residuos que sean extremos y si hay datos con un apalancamiento significativo.
Nota: En este ejemplo vimos que el resultado que se obtienen al evaluar el modelo se utilizó como argumento de las funciones summary() y plot(). Una manera de simplificar el código consiste en almacenar este resultado en una variable. El nombre de la variable se puede entonces utilizar como argumento. El siguiente código reproduce los resultados obtenidos anteriormente:
miModelo <- lm(lm(mpg~hp+wt+am))
summary(miModelo)
par(2,2)
plot(miModelo)
Resumen
Aquí está el código completo utilizado en este ejemplo:
library(car)
data(mtcars)
attach(mtcars)
miModelo <- lm(mpg~hp+wt+am)
summary(miModelo)
par(mfrow=c(2,2))
plot(miModelo)
par(mfrow=c(1,1))