Ejercicio 57: Regresión Lineal Simple en Datos Reales
En este ejercicio, se aplicará un modelo de regresión lineal simple a un conjunto de datos reales para explorar la relación entre el PIB per cápita y la esperanza de vida. Se utilizará el dataset de Gapminder, que proporciona datos económicos y demográficos de diversos países a lo largo del tiempo.
Objetivos
- Cargar y explorar el dataset de Gapminder.
- Modelar la relación entre el PIB per cápita y la esperanza de vida utilizando un modelo de regresión lineal simple.
- Evaluar la bondad del ajuste del modelo mediante el coeficiente de determinación (R²) y un gráfico de residuos.
Entrada de Datos
- Dataset de Gapminder: Este conjunto de datos incluye información sobre el PIB per cápita y la esperanza de vida de varios países.
Código Base
# Importar las bibliotecas necesarias
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
# Cargar el dataset de Gapminder
# Asegúrese de que el archivo 'gapminder.csv' esté en el mismo directorio que este notebook
data = pd.read_csv('gapminder.csv')
# Seleccionar las columnas relevantes
pib_per_capita = data['gdpPercap']
esperanza_vida = data['lifeExp']
# Inicializar el modelo de regresión lineal
modelo = LinearRegression()
# TODO: Implementar
# Ajustar el modelo a los datos
# modelo.fit(...)
# Predecir los valores de esperanza de vida
# predicciones = modelo.predict(...)
# Calcular el coeficiente de determinación R²
# r2 = r2_score(...)
# Graficar los residuos
# plt.scatter(...)
# Mostrar el gráfico
# plt.show()
Pruebas
Ejemplo de ejecución:
- Cargar el dataset y visualizar las primeras filas para entender su estructura.
- Ajustar el modelo de regresión lineal simple a los datos.
- Calcular y mostrar el coeficiente de determinación R².
- Graficar los residuos para evaluar la calidad del ajuste.
# Ejemplo de prueba
print(data.head()) # Visualizar las primeras filas del dataset
# Ajustar el modelo y calcular R²
modelo.fit(pib_per_capita.values.reshape(-1, 1), esperanza_vida)
predicciones = modelo.predict(pib_per_capita.values.reshape(-1, 1))
r2 = r2_score(esperanza_vida, predicciones)
print(f'Coeficiente de determinación R²: {r2}')
# Graficar los residuos
residuos = esperanza_vida - predicciones
plt.scatter(pib_per_capita, residuos)
plt.xlabel('PIB per cápita')
plt.ylabel('Residuos')
plt.title('Gráfico de Residuos')
plt.axhline(y=0, color='r', linestyle='--')
plt.show()
Pregunta de Reflexión
- ¿El modelo es lineal en los datos originales, o es necesario aplicar una transformación para mejorar el ajuste?