Ejercicio 58: Evaluación de Suposiciones de la Regresión Lineal

En este ejercicio, se evaluarán las suposiciones fundamentales de un modelo de regresión lineal, específicamente heterocedasticidad, normalidad de residuos y colinealidad. Estas suposiciones son cruciales para asegurar la validez de los resultados de un modelo de regresión.

Objetivos

  • Diagnosticar la presencia de heterocedasticidad en un modelo de regresión lineal.
  • Evaluar la normalidad de los residuos del modelo.
  • Identificar colinealidad entre las variables independientes.

Entrada de Datos

  • Un conjunto de datos con variables independientes y una variable dependiente para ajustar un modelo de regresión lineal.

Código Base

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.stats.diagnostic import het_breuschpagan

# Cargar los datos
# TODO: Reemplazar 'ruta_a_los_datos.csv' con la ruta del archivo de datos
datos = pd.read_csv('ruta_a_los_datos.csv')

# Definir variables independientes y dependiente
# TODO: Ajustar los nombres de las columnas según el conjunto de datos
X = datos[['variable_independiente1', 'variable_independiente2']]
y = datos['variable_dependiente']

# Agregar constante para el modelo
X = sm.add_constant(X)

# Ajustar el modelo de regresión lineal
modelo = sm.OLS(y, X).fit()

# TODO: Implementar

Tareas

  1. Diagnóstico de Heterocedasticidad:

    • Realizar la prueba de Breusch-Pagan para detectar heterocedasticidad en los residuos del modelo.
  2. Evaluación de Normalidad de Residuos:

    • Graficar un histograma de los residuos y un gráfico Q-Q para evaluar la normalidad.
  3. Detección de Colinealidad:

    • Calcular la matriz de correlación de las variables independientes.
    • Calcular el Factor de Inflación de la Varianza (VIF) para cada variable independiente.

Pruebas

# Prueba de heterocedasticidad
residuos = modelo.resid
prueba_bp = het_breuschpagan(residuos, X)
print('Prueba de Breusch-Pagan:', prueba_bp)

# Gráfico de normalidad de residuos
plt.hist(residuos, bins=30, edgecolor='k')
plt.title('Histograma de Residuos')
plt.show()

sm.qqplot(residuos, line='s')
plt.title('Gráfico Q-Q de Residuos')
plt.show()

# Matriz de correlación
correlacion = X.corr()
print('Matriz de Correlación:\n', correlacion)

# Calcular VIF
vif_data = pd.DataFrame()
vif_data['Variable'] = X.columns
vif_data['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
print('Factor de Inflación de la Varianza:\n', vif_data)

Pregunta de Reflexión

  • ¿Qué suposición de la regresión lineal es la más fácil de violar en datasets reales?