Ejercicio 46: Implementación Manual de Regresión Lineal con NumPy

En este ejercicio, se solicita implementar un regresor lineal simple utilizando NumPy, replicando el funcionamiento esencial de regplot en Seaborn. El objetivo es comprender y aplicar los principios básicos de la regresión lineal ordinaria (OLS) mediante álgebra lineal, específicamente utilizando la pseudoinversa de Moore-Penrose.

Objetivos

  1. Implementar un modelo de regresión lineal simple utilizando NumPy.
  2. Generar un gráfico de dispersión de los datos.
  3. Dibujar la línea de regresión ajustada sobre el gráfico de dispersión.
  4. Evitar opciones de robustez adicionales para mantener el enfoque educativo.

Tipo de Ejercicio

  • Práctico

Resultado Esperado

  • Visualización

Dificultad

  • Intermedio

Entrada de Datos

  • x: Lista o array de valores independientes.
  • y: Lista o array de valores dependientes.

Código Base

import numpy as np
import matplotlib.pyplot as plt

class SimpleRegressionPlot:
    def __init__(self, x, y):
        """Inicializa con datos x e y."""
        self.x = np.asarray(x)
        self.y = np.asarray(y)

    def fit_ols(self, x, y):
        """Calcula los coeficientes de regresión OLS usando álgebra lineal."""
        X = np.c_[np.ones(len(x)), x]  # Añadir término de intercepto
        beta = np.linalg.pinv(X) @ y  # Calcular solución OLS
        return beta  # Retorna [intercepto, pendiente]

    def predict(self, x_new):
        """Predice valores de y para valores de x dados usando el modelo ajustado."""
        beta = self.fit_ols(self.x, self.y)
        X_new = np.c_[np.ones(len(x_new)), x_new]
        return X_new @ beta  # Calcular y predicho

    def plot(self):
        """Genera gráfico de dispersión con línea de regresión ajustada."""
        # TODO: Implementar

Pruebas

# Ejemplo de uso
np.random.seed(42)
x = np.random.rand(50) * 10
y = 2.5 * x + np.random.randn(50) * 5  # Relación verdadera con ruido

reg_plot = SimpleRegressionPlot(x, y)
reg_plot.plot()

Este ejercicio proporciona una base sólida para comprender la implementación manual de un regresor lineal simple y su visualización, replicando el comportamiento básico de regplot en Seaborn.