9.5 Ejercicios

1. Correlación y (no) linealidad I

Considere el modelo de regresión lineal simple estimado \[\widehat{medv_i} = 34.554 - 0.95\times lstat_i,\]

donde medv (el valor medio de la vivienda en el suburbio) y lstat (el porcentaje de hogares con un nivel socioeconómico bajo en el suburbio) son variables del ya conocido conjunto de datos Boston.

El objeto lm() para el modelo anterior está disponible como mod en el entorno de trabajo. Se ha cargado el paquete MASS.

Instrucciones:

  • Calcular el coeficiente de correlación entre medv y lstat y guardarlo en corr.

  • Graficar medv contra lstat y agregar la línea de regresión usando el objeto modelo mod. ¿Que puede notar?

Sugerencias:

  • Puede usar cor() para calcular la correlación entre variables.

  • Puede usar plot() y abline() para visualizar los resultados de la regresión.

2. Correlación y (no) linealidad II

En el ejercicio anterior se vio un ejemplo donde la correlación entre la variable dependiente medv y el regresor medv no es útil para elegir la forma funcional de la regresión, ya que la correlación captura solo la relación lineal.

Como alternativa, considere la especificación no lineal

\[medv_i = \beta_0 + \beta_1\times\log(lstat_i) + u_i.\]

Se ha cargado el paquete MASS.

Instrucciones:

  • Realizar la regresión desde arriba y asigne el resultado a log_mod.

  • Visualizar sus resultados usando un diagrama de dispersión y agregar la línea de regresión. En comparación con el ejercicio anterior, ¿qué nota ahora?

Sugerencias:

  • Utilizar lm() para realizar la regresión.

  • Utilizar plot() y abline() para visualizar los resultados de la regresión.

3. El orden polinómico óptimo — Prueba secuencial

Recuerde el siguiente modelo del ejercicio anterior \[medv_i = \beta_0 + \beta_1\times\log(lstat_i) + u_i.\]

Se vio que esta especificación de modelo parece ser una opción razonable. Sin embargo, un polinomio de orden superior en \(\log(lstat_i)\) puede ser más adecuado para explicar \(medv\).

Se han cargado los paquetes AER y MASS.

Instrucciones:

  • Determinar el orden óptimo de un modelo polylog usando pruebas secuenciales. Utilizar un orden polinomial máximo de \(r = 4\) y el nivel de significancia \(\alpha=0.05\). Se recomienda el uso de un bucle for() y se le recomienda el siguiente enfoque:

    1. Calcular un modelo, suponiendo mod, que comienza con el orden polinomial más alto.
    2. Guardar el valor \(p\) (usar errores estándar robustos) del parámetro relevante y compararlo con el nivel de significancia \(\alpha\)
    3. Si no puede rechazar la hipótesis nula, repetir los pasos 1 y 2 para el siguiente orden polinomial más bajo; de lo contrario, detener el ciclo e imprimir el orden polinomial.
  • Calcular \(R^2\) del modelo seleccionado y asignarlo a R2.

Sugerencias:

  • El índice del bucle for() debe comenzar en 4 y terminar en 1.

  • El uso de poly() en el argumento formula de lm() es una forma genérica de incorporar órdenes superiores de una determinada variable en el modelo. Además de la variable, se debe especificar el grado del polinomio mediante el argumento degree y establecer raw = TRUE.

  • Usar coeftest() junto con el argumento vcov. para obtener valores \(p\) (¡usar errores estándar robustos!). Utilizar la estructura del objeto resultante para extraer el valor \(p\) relevante.

  • Una instrucción if() puede ser útil para verificar si se cumple la condición para la aceptación del nulo en el paso 3.

  • Un bucle for() se detiene usando break.

  • Usar summary() para obtener \(R^2\). Puede extraerlo agregando $r.squared a la llamada de la función.

4. El efecto estimado de un cambio de unidad

Reconsidere el modelo polylog del ejercicio anterior que fue seleccionado por el enfoque de prueba secuencial. Como este modelo es logarítmico y de forma cuadrática, no se puede simplemente leer el efecto estimado de un cambio de unidad (es decir, uno por ciento) en lstat del resumen de coeficientes porque este efecto depende del nivel de lstat. Se puede calcular esto manualmente.

El modelo polylog mod_pl seleccionado está disponible en el entorno de trabajo. Se ha cargado el paquete MASS.

Instrucciones:

Suponga que se está interesado en el efecto en medv de un aumento en lstat de \(10\%\) a \(11\%\).

  • Configurar un data.frame con las observaciones relevantes de lstat.

  • Utilizar las nuevas observaciones para predecir los valores correspondientes de medv.

  • Calcular el efecto esperado con la ayuda de diff().

Sugerencias:

  • Se puede usar predict() junto con los nuevos datos para obtener los valores predichos de medv. Se debe tener en cuenta que los nombres de las columnas del data.frame deben coincidir con los nombres de los regresores cuando se usa predict().

  • diff() espera un vector. Calcula las diferencias entre todas las entradas de este vector.

5. Interacciones entre variables independientes I

Considere el siguiente modelo de regresión

\[medv_i=\beta_0+\beta_1\times chas_i+\beta_2\times old_i+\beta_3\times (chas_i\cdot old_i)+u_i\]

donde \(chas_i\) y \(old_i\) son variables ficticias. El primero toma el valor \(1\), si el río Charles (un río corto en las proximidades de Boston) pasa por el suburbio \(i\) y es \(0\) en caso contrario. Este último indica una alta proporción de edificios antiguos y está construido como

\[\begin{align} old_i = & \, \begin{cases} 1 & \text{si $age_i\geq 95$},\\ 0 & \text{de otro modo}. \end{cases} \end{align}\]

siendo \(age_i\) la proporción de unidades ocupadas por sus propietarios construidas antes de 1940 en el suburbio \(i\).

Se han cargado los paquetes MASS y AER.

Instrucciones:

  • Generar y agregar la variable binaria old al conjunto de datos Boston.

  • Realizar la regresión indicada anteriormente y asignar el resultado a mod_bb.

  • Obtener un resumen robusto de coeficientes del modelo. ¿Cómo interpreta los resultados?

Sugerencias:

  • El operador >= puede usarse para generar un vector lógico. Transformar un vector lógico al tipo numérico a través de as.numeric().

  • En lm() existen dos formas de incluir términos de interacción usando el argumento formula:

    1. Var1*Var2 para agregar Var1, Var2 y el término de interacción correspondiente a la vez

    2. Var1:Var2 para agregar manualmente el término de interacción (lo que, por supuesto, requiere que se agreguen los términos restantes manualmente también)

6. Interacciones entre variables independientes II

Ahora considere el modelo de regresión

\[medv_i=\beta_0+\beta_1\times indus_i+\beta_2\times old_i+\beta_3\times (indus_i\cdot old_i)+u_i\]

con \(old_i\) definido como en el ejercicio anterior y \(indus_i\) siendo la proporción de acres comerciales no minoristas en el suburbio \(i\).

El vector old del ejercicio anterior se ha agregado al conjunto de datos. Se ha cargado el paquete MASS.

Instrucciones:

  • Estimar el modelo de regresión anterior y asignar el resultado a mod_bc.

  • Extraer los coeficientes estimados del modelo y asígnarlos a params.

  • Graficar medv contra indus y agregar las líneas de regresión para ambos estados de la variable binaria \(old\).

Sugerencias:

  • Utilizar la estructura de mod_bc la salida generada por coef() para extraer los coeficientes estimados.

  • Además de pasar un objeto lm() a abline() también se puede especificar la intercepción y la pendiente manualmente usando los argumentos a y b, respectivamente.