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:

  1. Cargar el dataset y visualizar las primeras filas para entender su estructura.
  2. Ajustar el modelo de regresión lineal simple a los datos.
  3. Calcular y mostrar el coeficiente de determinación R².
  4. 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?