1. Objetivo de los modelos de regresión

2. El modelo de regresión lineal simple \(Y = \beta_0 + \beta_1 X + \text{N}(0, \sigma^2)\)

3. El modelo de regresión lineal múltiple \(Y = \beta_0 + \beta_1 X_1 + \cdots + \beta_p X_p + \text{N}(0, \sigma^2)\)

4. Modelos de regresión no lineal a partir del modelo lineal

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 cantidad 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%)

En este problema vamos a fabricar datos de un modelo lineal, pàra comprobar si la regresión lineal es capaz de acertarlo. Completa los bloques de código de cada apartado (modificando el parámetro eval=TRUE del bloque):

  1. Define una hoja de datos con 500 datos del siguiente modelo de regresión lineal: \(Y = 60.5 + 32.1X + N(\mu=0,\sigma^2=50)\), donde \(X\) serán datos muestreados del modelo uniforme en el intervalo \([0.0, 3.0]\). Usa una semilla (la que quieras) para poder recompilar sin que cambien los datos cada vez.
# 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)
  1. Escribe la ecuación de la recta de regresión de \(Y\) sobre \(X\) (\(\hat{Y} = \hat{\beta}_0 + \hat{\beta}_1 X\)) y el coeficiente de bondad de ajuste (\(R^2)\).
# CAMBIA EL PARÁMETRO eval DE ESTE BLOQUE A TRUE PARA COMPILAR !
# completa lo que falta
recta = lm(formula=, data=) # hacer la regresión
summary(recta)

La ecuación de la recta de regresión es … y el coeficiente \(R^2\) es …

  1. Representa los datos \((X,Y)\), la recta de regresión, y la “verdadera recta” en la misma gráfica. ¿De quién es la culpa de que los datos de la muestra no estén alineados?
# 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 que calcula los datos

LOS DATOS DE LA MUESTRA NO ESTÁN ALINEADOS POR CULPA DE… AQUÍ TUS COMENTARIOS

  1. Representa las dos gráficas que sirven para valorar si nuestros datos se adecuan al modelo lineal (NOSOTROS SABEMOS QUE SÍ, PORQUE HEMOS FABRICADO LOS DATOS CON UN MODELO LINEAL CONCRETO, PERO EL AZAR DEL ERROR ALEATORIO PUEDE HABER SIDO PUÑETERO), y comenta en función de lo observado en ellas.
# aquí tu código

AQUÍ TUS COMENTARIOS

  1. Contrasta si estos datos son compatibles (al 5% de significación) con que la \(Y\) fluctúa aleatoriamente, sin depender de \(X\).
# aquí tu código

AQUÍ TUS COMENTARIOS

  1. Escribe el intervalo de confianza al 90% para la predicción de \(Y\) cuando \(X=2\).
# aquí tu código

AQUÍ TUS COMENTARIOS

  1. Simula 10000 datos de \(Y\), todos ellos con \(X=2\) (como en el primer apartado), y calcula el porcentaje de dichas simulaciones de \(Y\) que entran dentro del intervalo de confianza que has calculado en el apartado anterior. ¿Te podías imaginar el resultado? Comenta.
# aquí tu código

AQUÍ TUS COMENTARIOS

  1. Escribe los intervalos de confianza al 90% para los dos parámetros de la recta, y comenta si estos intervalos “recogen” los verdaderos valores de los parámetros.
# aquí tu código

AQUÍ TUS COMENTARIOS

Problema 2 (25%)

Usando los datos cars, que almacena distancias de frenado de coches a determinadas velocidades.

  1. Realiza el gráfico de la distancia vs velocidad (distancia en función de la velocidad) e indica si la relación lineal parece razonable o sospechosamente descabellada.
data(cars) # esto carga los datos
#help(cars) # si quieres más info sober los datos
# aquí tu código

AQUI TUS COMENTARIOS

  1. Escribe la ecuación de la recta de regresión que ajusta los datos, y dibújala junto a los datos. Además, indica los valores de los dos coeficientes R-cuadrado (normal y ajustado).
# aquí tu código

La ecuación de la recta de regresión es… CONTINUA AQUÍ

  1. Suponiendo correcto el modelo lineal, y usando una significación del 5%, ¿se puede aceptar que la distancia de frenado, en realidad, no depende en absoluto de la velocidad?
# aquí tu código

AQUI TUS COMENTARIOS

  1. Pronostica la distancia de frenado de un coche que circula a 50km/h (¡ojo a las unidades de los datos!), y acompáñalo con un intervalo de confianza al 99% de dicha predicción. Comenta a qué distancia de un paso de cebra se podría colocar una señal para que los conductores estén alerta.
# aquí tu código

AQUI TUS COMENTARIOS

  1. ¿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.
# aquí tu código

AQUI TUS COMENTARIOS

Problema 3 (25%)

Usando los datos mtcars:

  1. Escribe la ecuación de la recta 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\) = …

  1. A la vista del summary(), ¿cuál de todas las variables explicativas es más creíble que NO intervenga en el modelo y se pueda excluir? Repite el apartado anterior, QUITANDO DICHA VARIABLE INDEPENDIENTE (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\) = …

  1. Repite el apartado anterior, QUITANDO DE NUEVO 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

  1. Comprobar la adecuación de los datos al último modelo lineal ajustado
# aquí tu código

AQUI TUS COMENTARIOS

Problema 4 (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.

  1. Representa la nube de puntos de los datos.
x = read.table(file='colesterol.txt', header=TRUE)
# aquí tu código

AQUI TUS COMENTARIOS

  1. 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 Y NUEVAS COLUMNAS QUE SEAN POTENCIAS DE x$dosis, Y APLICAR LA REGRESIÓN MÚLTIPLE CON ELLA)
# aquí tu código

AQUI TUS COMENTARIOS

  1. Según los datos y usando una significación del 5%, ¿se puede admitir que el polinomio de la regresión NO NECESITA LLEGAR hasta el grado máximo (4), y que por tanto se puede hacer un ajuste con un grado menor? ¿Por qué?
# aquí tu código

AQUI TUS COMENTARIOS

  1. Repite el ajuste del modelo, bajando el grado del polinomio, mientras el coeficiente de grado máximo sea “suprimible”.
# aquí tu código

AQUI TUS COMENTARIOS

  1. 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

  1. 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