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 de \(Y\)) o bien
      • prediction (para el intervalo de confianza para la PREDICCIÓN de \(Y\))
    • level: nivel de confianza del intervalo de confianza, 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 “sacar” 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.
  • 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),
        • sin grandes diferencias de amplitud vertical (eso sería la homocedasticidad)
      • Normal Q-Q: gráfica de cuantiles (de los residuos, respecto de los cuantiles teóricos bajo normalidad). Si el modelo lineal es adecuado, se espera una nube de puntos ceñida a la diagonal (eso sería la normalidad)

6. Ejercicios de evaluación

Problema 1 (25%)

Usando los datos women, que almacena promedios de pesos de mujeres americanas con alturas determinadas.

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

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

  1. Suponiendo correcto el modelo lineal, ¿se puede rechazar, estadísticamente y usando una significación del 5%, que el peso depende de la altura?
# aquí tu código

AQUI TUS COMENTARIOS

  1. Escribe los intervalos de confianza al 99% para los verdaderos valores de la ordenada en el origen (intercept) y la pendiente.
# aquí tu código

AQUI TUS COMENTARIOS

  1. Suponiendo correcto el modelo lineal, ¿se puede rechazar, estadísticamente y usando una significación del 5%, que la verdadera ordenada en el origen (intercept) vale 0?
# aquí tu código

AQUI TUS COMENTARIOS

  1. Suponiendo correcto el modelo lineal, ¿se puede rechazar, estadísticamente y usando una significación del 5%, que la ordenada en el origen vale -100? (Ayuda: haz el IC.)
# aquí tu código

AQUI TUS COMENTARIOS

  1. Aporta un indicador de la bondad del ajuste de los datos a la recta e interprétalo.
# aquí tu código

AQUI TUS COMENTARIOS

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

  1. ¿Los datos son incompatibles 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 2 (25%)

Usando los datos mtcars:

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

La ecuación es …. Los coeficientes de bondad de ajuste son \(R^2\) = … y \(\overline{R}^2\) = …

  1. Repite el apartado anterior, QUITANDO LA VARIABLE INDEPENDIENTE que menos parece influir sobre mpg (es decir, aquella con MAYOR \(p\)-valor asociado), siempre que haya alguna con \(p\)-valor 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 LA VARIABLE INDEPENDIENTE, con MAYOR \(p\)-valor asociado, siempre que haya alguna con \(p\)-valor superior a \(0.05\), y partiendo del modelo anterior. Escribe TODAS las ecuaciones que van saliendo, juntoa 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.

  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.
# 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 alcanza el grado máximo, y que por tanto se puede buscar un grado menor? ¿Por qué?
# aquí tu código

AQUI TUS COMENTARIOS

  1. Repite el apartado 1, bajando el grado del polinomio, mientras el apartado 2 siga teniendo respuesta afirmativa.
# 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

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:

  1. 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.
# 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 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=) # pedir regresión

La ecuación de la recta de regresión es …

  1. Representa los datos \((X,Y)\), la recta de regresión, y la “verdadera recta” en el mismo plano.
# CAMBIA EL PARÁMETRO eval DE ESTE BLOQUE A TRUE PARA COMPILAR !
# completa lo que falta
plot(???)   # muestra en gráfica
abline(???, col='red') # recta de regresión
abline(a=???, b=???, col='green') # "verdadera" recta
  1. Calcula la \(R^2\) para estos datos.
# aquí tu código

\(R^2\) = …

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

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