5. El modelo de regresión lineal con R
5.1. Estimación de parámetros (ecuación de la función de regresión)
- Función
lm(formula, data)
:
- Argumentos:
formula
: expresión del tipo y ~ x
o y ~ x1 + x2 + ... + xp
que indica qué variable (y
) depende de cuáles (x
o bien x1
, x2
, etc.)
data
: hoja de datos que contiene las columnas implicadas (o no poner nada si los datos están en vectores)
- Devuelve: un objeto especial de tipo lista, con muchas componentes, entre otras:
$coefficients
: vector etiquetado con los parámetros \(\hat{\beta}_0\), \(\hat{\beta}_1\), etc. Con ellos se puede “escribir” la función de regresión \(\hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 X\), etc.
$fitted.values
: \(\hat{y}_i\), predicciones de \(Y\) para los datos de la muestra
$residuals
: residuos en la muestra (\(y_i - \hat{y}_i\), observadas menos predichas)
- Gráfica de la recta de regresión: si es regresión SIMPLE, se puede dibujar la recta de regresión junto a los datos:
- Primero un
plot(x, y)
de los datos,
- Después
abline(obj)
, donde obj
es el objeto devuelto por lm()
.
5.2. Predicción de \(Y\) y estimación de \(E(Y)\), con sus intervalos de confianza
- Función
predict(obj, newdata, interval, level)
:
- Argumentos:
obj
: objeto devuelto por la función lm()
newdata
: hoja de datos con valores de las variables independientes. Debe llevar columnas etiquetadas como las variables independientes usadas en la función lm()
. Por ejemplo, data.frame(x=5)
o bien data.frame(x1=5, x2=3)
interval
: por defecto no lo calcula.
- Poner
"confidence"
(para el intervalo de confianza para el VALOR MEDIO, o ESPERANZA, de \(Y\)) o bien
"prediction"
(para el intervalo de confianza para la PREDICCIÓN de \(Y\))
level
: nivel de confianza del intervalo, si se ha pedido
- Devuelve: un vector etiquetado, con las predicciones de \(Y\) (que coinciden con las estimaciones de \(E(Y)\)), y los intervalos de confianza (si se han pedido)
5.3. Intervalos de confianza para los parámetros \(\beta\)’s del modelo
- Función
confint(obj, parm, level)
:
- Argumentos:
obj
: objeto devuelto por la función lm()
parm
: nombres de los parámetros (omitir para que salgan todos)
level
: nivel de confianza
- Devuelve: una matriz con cada fila correspondiente a un parámetro
5.4. ¿\(\beta_i = 0\)? Contrastes de hipótesis sobre la presunta nulidad de los parámetros (para “excluir” variables innecesarias del modelo lineal, que no afectan significativamente al valor de \(Y\))
- El contraste \(\left\{ \begin{array}{rl} H_0: & \beta_i = 0 \\ H_1: & \beta_i \neq 0 \end{array} \right.\) permite decidir si excluir dicha variable del modelo (ya que si \(\beta_i = 0\), la variable \(X_i\) no produce cambios en \(Y\), al estar multiplicada por \(0\))
- Función
summary(obj)
:
- Argumento:
obj
: el objeto devuelto por la función lm()
- Devuelve: por pantalla, entre otras informaciones, una tabla con una fila para cada parámetro (\(\beta_0 =\)
(Intercept)
, etc.), y una primera columna con la estimación, y la última columna con el \(p\)-valor de cada contraste.
5.5. Bondad de ajuste
- El coeficiente R-cuadrado mide la bondad del ajuste del modelo lineal a la nube de puntos, pero HAY DOS VERSIONES:
Multiple R-squared
: el original, denotado por \(R^2\)
- Su valor está siempre entre \(0\) y \(1\).
- A mayor valor, mejor ajuste
- Se usa con regresión SIMPLE.
Adjusted R-squared
: el ajustado, denotado por \(\overline{R}^2\)
- Su valor NO SIEMPRE está entre \(0\) y \(1\).
- A mayor valor, mejor ajuste
- Se usa más con regresión MÚLTIPLE, porque permite comparar la bondad de ajuste de modelos con distinta camtidad de variables independientes.
- Aparecen al pedir un
summary()
de la regresión hecha
- Recuerda que una bondad de ajuste “alta” no significa que los datos sigan el patrón del modelo lineal
5.6. Adecuación del modelo
- Una vez ajustado el modelo, es imprescindible verificar que los datos siguen el patrón del modelo lineal.
- Normalidad: errores siguen modelo normal
- Homocedasticidad: errores tienen misma varianza
- Independencia: errores independientes entre sí, y también de los valores de las \(X\)’s
- Se suele resolver gráficamente:
- Función
plot(x)
:
- Argumento:
x
: objeto devuelto por la función lm()
- Devuelve: 4 figuras, de las que interpretamos dos:
Residuals versus Fitted
: Residuos en función de valores predichos. Si el modelo lineal es adecuado, se espera una nube de residuos, de izquierda a derecha, en torno a una banda horizontal a nivel \(0\):
- siguiendo un patrón aleatorio (eso sería la independencia): la línea roja marca una tendencia horizontal sin grandes cambios. Si no, fallaría la independencia de los errores.
- sin grandes diferencias de amplitud vertical (eso sería la homocedasticidad): los puntos se alejan de la línea horizontal de manera similar de izquierda a derecha. Si no, fallaría la varianza constante.
Normal Q-Q
: gráfica de cuantiles (de los residuos, respecto de los cuantiles teóricos de la normal). Si el modelo lineal es adecuado, se espera una nube de puntos ceñida a la diagonal (eso sería la normalidad). Si no, estaría fallando la normalidad de los errores.
- Con que falle una de las características “estrepitosamente”, el modelo lineal se debería descartar, y se deberían buscar otros modelos alternativos (tal vez, un model lineal con las variables transformadas, o incluyendo más variables). ## 6. Ejercicios de evaluación
Problema 1 (25%)
Usando los datos women
, que almacena promedios de pesos de mujeres americanas con alturas determinadas.
- Realiza el gráfico de peso vs altura (peso en función de la altura) e indica si la relación lineal parece razonable o sospechosamente descabellada.
data(women) # esto carga los datos
# aquí tu código
AQUI TUS COMENTARIOS
- Escribe la ecuación de la recta de regresión que ajusta los datos.
# aquí tu código
La ecuación de la recta de regresión es… CONTINUA AQUÍ
- Suponiendo correcto el modelo lineal, ¿se puede rechazar, estadísticamente y usando una significación del 5%, que el peso depende de la altura? (es decir, que la pendiente es distinta de \(0\))
# aquí tu código
AQUI TUS COMENTARIOS
- Escribe los intervalos de confianza al 90% para los verdaderos valores de la ordenada en el origen (intercept) y la pendiente.
# aquí tu código
AQUI TUS COMENTARIOS
- Suponiendo correcto el modelo lineal, ¿se puede rechazar, estadísticamente y usando una significación del 10%, que la ordenada en el origen vale -100? (Ayuda: haz el IC.)
# aquí tu código
AQUI TUS COMENTARIOS
- Aporta un indicador de la bondad del ajuste de los datos a la recta e interprétalo.
# aquí tu código
AQUI TUS COMENTARIOS
- Pronostica el peso (en libras) de una mujer de 74 pulgadas, y acompáñalo con un intervalo de confianza al 80%.
# aquí tu código
AQUI TUS COMENTARIOS
- ¿Los datos son compatibles con las hipótesis del modelo de regresión lineal? Usa los dos gráficos habituales, y comenta el cumplimiento o no de las tres hipótesis que necesita el modelo lineal. En caso negativo, propón un modelo alternativo (sólo de palabra, sin usar el R)
# aquí tu código
AQUI TUS COMENTARIOS
Problema 2 (25%)
Usando los datos mtcars
:
- Escribe la ecuación de regresión de la columna
mpg
sobre todas las demás, y anota el valor de los dos coeficientes de bondad de ajuste.
data(mtcars) # esto carga los datos
# aquí tu código
La ecuación es …. Los coeficientes de bondad de ajuste son \(R^2\) = … y \(\overline{R}^2\) = …
- Repite el apartado anterior, QUITANDO LA VARIABLE INDEPENDIENTE que menos parece influir sobre
mpg
(es decir, aquella con MAYOR \(p\)-valor asociado, siempre que sea superior a \(0.05\)). Escribe la ecuación y los dos coeficientes de bondad de ajuste.
# aquí tu código
Quitamos la variable … y la ecuación es …. Los coeficientes de bondad de ajuste son \(R^2\) = … y \(\overline{R}^2\) = …
- Repite el apartado anterior, QUITANDO DEL MODELO LA VARIABLE INDEPENDIENTE, con MAYOR \(p\)-valor asociado (siempre que sea superior a \(0.05\)). Escribe TODAS las ecuaciones que van saliendo, junto a sus dos coeficientes de bondad de ajuste.
# aquí tu código
Quitamos la variable … y la ecuación es …. Los coeficientes de bondad de ajuste son \(R^2\) = … y \(\overline{R}^2\) = …
Repetir hasta que no haya p-valores mayores que 0.05
Problema 3 (25%)
Supongamos que se pretende analizar el efecto de un medicamento sobre el nivel de colesterol en sangre. Se experimenta con pacientes de características muy similares, administrando distintas dosis del medicamento a cada uno. Usa el modelo de regresión lineal múltiple para ajustar los datos del fichero colesterol.txt
a un modelo polinómico de hasta grado 4.
- Representa la nube de puntos de los datos.
x = read.table(file='colesterol.txt', header=TRUE)
# aquí tu código
AQUI TUS COMENTARIOS
- Escribe la ecuación del polinomio de regresión de grado 4 por mínimos cuadrados. (AYUDA: DEFINIR UNA NUEVA HOJA DE DATOS CON LAS COLUMNAS de
x
i NUEVAS COLUMNAS QUE SEAN POTENCIAS DE x$dosis
, I APLICAR LA REGRESIÓN MÚLTIPLE CON ELLA)
# aquí tu código
AQUI TUS COMENTARIOS
- Según los datos y usando una significación del 5%, ¿se puede admitir que el polinomio de la regresión no alcanza el grado máximo (4), y que por tanto se puede buscar un grado menor? ¿Por qué?
# aquí tu código
AQUI TUS COMENTARIOS
- Repite el apartado 1, bajando el grado del polinomio, mientras el apartado 2 siga teniendo respuesta afirmativa.
# aquí tu código
AQUI TUS COMENTARIOS
- Una vez encontrado el grado para el que no hay argumentos estadísticos que permitan “bajar”, realiza la predicción del posible valor de Y para X = “últimas dos cifras de tu DNI”, y escribe el intervalo de confianza al 90% para dicha predicción.
# aquí tu código
AQUI TUS COMENTARIOS
- Copia las gráficas que permiten evaluar la adecuación del modelo de regresión lineal, e interprétalas.
# aquí tu código
AQUI TUS COMENTARIOS
Problema 4 (25%)
Completa el bloque de código de más abajo (modificando el parámetro eval=TRUE
del bloque) para realizar lo siguiente:
- Define una hoja de datos con 500 datos del modelo de regresión lineal \(Y = 60.5 + 32.1X + N(\mu=0,\sigma^2=50)\), donde \(X\) son datos del modelo uniforme entre \(0.0\) y \(3.0\). Usa una semilla para poder recompilar sin que cambien los datos. (AYUDA: VER SECCIÓN 2)
# CAMBIA EL PARÁMETRO eval DE ESTE BLOQUE A TRUE PARA COMPILAR !
# completa lo que falta
set.seed(???) # poner semilla
xi = runif(500, 0, 3) # 500 muestreos de la X
ei = # 500 muestreos del error (normal)
yi = # valores de Y a partir de la fórmula del modelo
xx = data.frame(X=xi, Y=yi) # muestra conjunta (en hoja de datos)
- Escribe la recta de regresión de \(Y\) sobre \(X\) estimada: \(\hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 X\).
# CAMBIA EL PARÁMETRO eval DE ESTE BLOQUE A TRUE PARA COMPILAR !
# completa lo que falta
recta = lm(formula=, data=) # hacer la regresión
La ecuación de la recta de regresión es …
- Representa los datos \((X,Y)\), la recta de regresión, y la “verdadera recta” en la misma gráfica.
# CAMBIA EL PARÁMETRO eval DE ESTE BLOQUE A TRUE PARA COMPILAR !
# completa lo que falta
plot(???) # gráfica de los datos de la muestra
abline(???, col='red') # recta de regresión
abline(a=???, b=???, col='green') # "verdadera" recta
- Calcula la \(R^2\) para estos datos.
# aquí tu código
\(R^2\) = …
- Representa las dos gráficas que sirven para justificar la adecuación del modelo, y comenta en función de lo observado en ellas.
# aquí tu código
AQUÍ TUS COMENTARIOS
- Escribe el intervalo de confianza al 90% para la predicción de \(Y\) cuando \(X=2\).
# aquí tu código
AQUÍ TUS COMENTARIOS
- Realiza 1000 simulaciones de Y para \(X=2\), y calcula el porcentaje de dichas simulaciones que entran dentro del intervalo de confianza calculado en el apartado anterior.
# aquí tu código
AQUÍ TUS COMENTARIOS