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
Diagnóstico de Heterocedasticidad:
- Realizar la prueba de Breusch-Pagan para detectar heterocedasticidad en los residuos del modelo.
Evaluación de Normalidad de Residuos:
- Graficar un histograma de los residuos y un gráfico Q-Q para evaluar la normalidad.
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?