📈 Módulo 7: Interpolación y Regresión#
📊 La Modelización de Datos Discretos#
Tanto la Interpolación como la Regresión son técnicas utilizadas para modelar la relación entre variables a partir de un conjunto de datos discretos \((x_i, y_i)\). La diferencia en su objetivo es crucial:
Interpolación (Fidelidad de Puntos)#
Busca construir una función que pase exactamente por todos los puntos de datos. Es ideal cuando los datos son precisos y se necesita estimar un valor intermedio.
Regresión (Fidelidad de Tendencia)#
Busca la mejor función de ajuste que capture la tendencia general de los datos, minimizando el error cuadrático total. Es indispensable para datos ruidosos o experimentales.
| Interpolación | Regresión |
|---|---|
| Pasa por todos los puntos | Minimiza la distancia a todos los puntos |
| Usado para estimar valores intermedios | Usado para modelar tendencias y hacer predicciones |
| Sensible al ruido (el ruido se incorpora) | Robusto al ruido (el ruido se suaviza) |
#
🖼️ Ilustración Conceptual#
La diferencia entre interpolación y regresión radica en cómo manejan el error y el ruido de los datos:
Ejemplo de Interpolación Numérica (Spline Cúbico)#
La curva de interpolación pasa por todos los nodos (puntos de datos).
Ejemplo de Regresión Numérica (Mínimos Cuadrados)#
La línea de regresión modela la tendencia general, sin pasar necesariamente por ningún punto, para suavizar el ruido.
🧮 Parte I: Interpolación#
La interpolación se realiza típicamente con polinomios.
1. Polinomio de Interpolación de Lagrange#
Construye un único polinomio de grado \(n\) que pasa por \(n+1\) puntos.
$$\mathbf{P_n(x) = \sum_{i=0}^{n} y_i L_i(x)}$$- Desventajas: Los polinomios de alto grado a menudo sufren el Fenómeno de Runge (grandes oscilaciones en los bordes), haciendo que la estimación sea inestable.
2. Interpolación con Splines Cúbicos (Cubic Spline)#
Es el método estándar en ingeniería. Divide el conjunto de datos en intervalos y utiliza un polinomio cúbico diferente para cada uno, exigiendo continuidad de la función, la primera derivada y la segunda derivada en los puntos de unión (nodos). Esto asegura una curva suave y físicamente plausible.
📉 Parte II: Regresión Lineal y No Lineal#
El método de Mínimos Cuadrados es el corazón de la regresión, buscando minimizar la Suma de Cuadrados de los Errores (SSE), \(E = \sum e_i^2\).
1. Regresión Lineal Simple#
Busca el mejor ajuste a la forma \(y = ax + b\). Los coeficientes \(a\) y \(b\) se encuentran resolviendo las ecuaciones normales.
$$\mathbf{a = \frac{n \sum (x_i y_i) - \sum x_i \sum y_i}{n \sum (x_i^2) - (\sum x_i)^2}} \quad \text{y} \quad \mathbf{b = \bar{y} - a\bar{x}}$$- Coeficiente de Determinación (\(R^2\)): Mide la bondad del ajuste. \(R^2 \approx 1\) indica que el modelo explica casi toda la variabilidad de los datos.
2. Regresión Polinomial y Múltiple#
Extiende el principio de Mínimos Cuadrados a modelos de orden superior (\(y = a_0 + a_1 x + a_2 x^2 + \dots\)) o a múltiples variables independientes.
💻 Herramientas de Python#
| Función | Propósito | Librería |
|---|---|---|
numpy.polyfit | Regresión Polinomial (Mínimos Cuadrados) | NumPy |
scipy.interpolate.interp1d | Interpolación (Lineal, Cúbica, etc.) | SciPy |
scipy.optimize.curve_fit | Regresión No Lineal (Ajuste a función definida por usuario) | SciPy |
📝 Ejercicios Propuestos (30 Ejercicios)#
A. Interpolación Manual y Conceptual (8 Ejercicios)#
Interpolación Lineal Manual: Dados los puntos \((1, 2)\) y \((3, 8)\).
- Tarea: Utiliza la fórmula de interpolación lineal para estimar el valor de \(y\) en \(x=1.5\).
Fenómeno de Runge (Conceptual):
- Pregunta de Análisis: Explica brevemente por qué la Interpolación Polinomial de Alto Grado es generalmente una mala elección y cómo el Spline Cúbico mitiga este problema.
Uso de Splines Cúbicos (
scipy): Dados \(x = [0, 1, 2, 3]\) y \(y = [0, 1, 0, -1]\).- Tarea: Utiliza
scipy.interpolate.interp1dcon el método'cubic'para estimar \(y\) en \(x=1.5\).
- Tarea: Utiliza
Interpolación Lineal en
SciPy: Usando los datos del ejercicio 3, utilizainterp1dcon el método'linear'para estimar \(y\) en \(x=1.5\). Compara la diferencia con el resultado cúbico.Interpolación Extrapolación (Riesgo): Dados \(x=[0, 1, 2]\) y \(y=[1, 2, 4]\).
- Tarea: Crea un interpolador cúbico (
interp1d). Intenta estimar \(y\) en \(x=3.0\) y \(x=-1.0\). - Pregunta de Análisis: ¿Por qué la extrapolación es inherentemente riesgosa en la interpolación?
- Tarea: Crea un interpolador cúbico (
Interpolación con Splines para Suavizado:
- Tarea: Crea 10 puntos de datos a partir de \(f(x) = \cos(x)\) en \([0, 2\pi]\). Añádeles un pequeño ruido aleatorio.
- Tarea: Usa
interp1d(método'cubic') para crear 100 puntos intermedios y visualiza el resultado.
Diferencia Dividida (Lagrange Conceptual):
- Pregunta de Análisis: ¿Cuál es la principal ventaja de usar la formulación de Diferencias Divididas de Newton sobre la forma estándar de Lagrange cuando se planea añadir más puntos de datos?
Requerimientos del Spline:
- Pregunta de Análisis: Para que un Spline Cúbico sea considerado “natural”, ¿qué condición de segunda derivada se debe aplicar en los puntos de borde (\(x_0\) y \(x_n\))?
B. Regresión Lineal (Mínimos Cuadrados) (8 Ejercicios)#
Cálculo Manual de Coeficientes: Dados los puntos \((1, 6), (2, 8), (3, 10)\).
- Tarea: Calcula manualmente los coeficientes \(a\) y \(b\) para la recta de mejor ajuste \(y=ax+b\) usando las fórmulas de Mínimos Cuadrados.
Regresión con
NumPy(Rigidez de Viga): Un ingeniero mide la deflexión \(D\) de una viga bajo diferentes cargas \(L\).Carga (\(L\)) [kN] Deflexión (\(D\)) [mm] 5 1.05 10 2.05 15 3.10 20 4.00 - Tarea: Utiliza
numpy.polyfitpara encontrar la relación lineal \(D = aL + b\). ¿Cuál es la pendiente \(a\)?
- Tarea: Utiliza
Cálculo de \(R^2\):
- Tarea: Usando los datos del ejercicio 10, calcula el coeficiente de determinación (\(R^2\)) para el ajuste lineal. Interpreta este valor.
Predicción con Regresión: Usando la ecuación de regresión obtenida en el ejercicio 10, ¿cuál es la deflexión esperada para una carga de \(12 \text{ kN}\)?
Regresión con Origen Forzado (Sin intercepto):
- Tarea: Ajusta los datos del ejercicio 10 a un modelo \(D = aL\) (sin intercepto). Utiliza la fórmula modificada \(a = \sum (x_i y_i) / \sum (x_i^2)\).
Residuales y Homocedasticidad:
- Tarea: Usando los datos del ejercicio 10, calcula el vector de residuales (\(y_i - \hat{y}_i\)).
- Pregunta de Análisis: ¿Cómo podría un gráfico de los residuales vs. \(x\) ayudar a determinar si un ajuste lineal es apropiado?
Regresión en un Conjunto de Datos de Ingeniería (Viscosidad): Estima la viscosidad (\(\mu\)) de un fluido a diferentes temperaturas (\(T\)).
Temperatura (\(T\)) [K] Viscosidad (\(\mu\)) [mPa·s] 280 1.25 300 0.98 320 0.81 340 0.69 - Tarea: ¿Un ajuste lineal es apropiado? ¿Qué indica el signo de la pendiente en este contexto físico?
Regresión Lineal Múltiple (Conceptual):
- Pregunta de Análisis: Si tuvieras que modelar el rendimiento de un motor (\(R\)) en función de la temperatura (\(T\)) y la velocidad (\(S\)), la regresión sería \(R = a_0 + a_1 T + a_2 S\). ¿Qué librería de Python se usaría para encontrar los coeficientes \(a_0, a_1, a_2\)?
C. Regresión Polinomial y No Lineal (14 Ejercicios)#
Ajuste Polinomial (Grado 2): Ajusta \(x = [0, 1, 2, 3, 4]\) y \(y = [1.0, 0.9, 1.4, 2.5, 4.1]\) a un polinomio de segundo grado.
- Tarea: Utiliza
numpy.polyfit(grado 2) para encontrar los tres coeficientes.
- Tarea: Utiliza
Selección de Modelo (Grado Óptimo): Usando los datos del ejercicio 17, ajusta a polinomios de grado 1, 2 y 3.
- Tarea: Calcula el \(R^2\) para cada uno. ¿Qué grado es el más apropiado?
Regresión Logarítmica (Linealizable): Ajusta la ecuación de la forma \(y = a \ln(x) + b\) a \(x = [1, 2, 3, 4]\) y \(y = [0.1, 0.7, 1.1, 1.4]\).
- Pista: Usa \(\mathbf{X} = \ln(x)\). Aplica
numpy.polyfita \((\mathbf{X}, y)\).
- Pista: Usa \(\mathbf{X} = \ln(x)\). Aplica
Regresión Exponencial No Lineal (Enfriamiento): Un proceso sigue \(T(t) = A e^{-kt} + C\).
- Tarea: Define una función Python para este modelo y utiliza
scipy.optimize.curve_fitpara ajustar \(t = [0, 1, 2, 3, 4, 5]\) y \(T = [100.0, 75.0, 56.0, 44.0, 36.0, 31.0]\). - Pregunta: ¿Cuál es el valor ajustado del parámetro de decaimiento \(k\)?
- Tarea: Define una función Python para este modelo y utiliza
Ajuste de la Ecuación de Michaelis-Menten (Bioingeniería): Ajusta la ecuación \(V = \frac{V_{\max} [S]}{K_m + [S]}\) a los siguientes datos:
$$[S] = [0.1, 0.5, 1.0, 2.0, 5.0]$$$$V = [0.05, 0.23, 0.38, 0.54, 0.70]$$- Tarea: Utiliza
scipy.optimize.curve_fitpara estimar \(V_{\max}\) y \(K_m\).
- Tarea: Utiliza
Ajuste de una Función de Potencia: Ajusta la ecuación de la forma \(y = ax^b\) (Ley de Potencia).
- Pista: Linealiza usando \(\ln(y) = \ln(a) + b \ln(x)\).
- Tarea: Utiliza esta linealización con
numpy.polyfitpara ajustar \(x = [1, 2, 3, 4]\) y \(y = [2.0, 8.1, 17.9, 32.2]\).
Evaluación de la Matriz de Covarianza:
- Pregunta de Análisis: ¿Cómo se relaciona la raíz cuadrada de los elementos de la diagonal principal de la matriz de covarianza (devuelta por
curve_fit) con la fiabilidad del ajuste?
- Pregunta de Análisis: ¿Cómo se relaciona la raíz cuadrada de los elementos de la diagonal principal de la matriz de covarianza (devuelta por
Necesidad de Valores Iniciales (
p0):- Pregunta de Análisis: ¿Por qué la función
scipy.optimize.curve_fita menudo requiere un argumento inicialp0(una suposición de los parámetros) para modelos complejos no lineales?
- Pregunta de Análisis: ¿Por qué la función
Modelos Polinomiales para Interpolación:
- Pregunta de Análisis: Si tuvieras que usar
numpy.polyfitpara interpolar exactamente \(n\) puntos, ¿qué grado de polinomio tendrías que especificar?
- Pregunta de Análisis: Si tuvieras que usar
Modelo Logístico (Población): Modelar el crecimiento de la población (\(P\)) usando una curva logística \(P(t) = \frac{L}{1 + e^{-k(t-t_0)}}\).
- Tarea: Utiliza
curve_fitpara ajustar \(t = [1, 2, 3, 4, 5, 6, 7]\) y \(P = [10, 20, 40, 70, 120, 160, 180]\).
- Tarea: Utiliza
Residuales Cuadráticos:
- Tarea: Para el ajuste lineal del ejercicio 10, calcula la Suma de Cuadrados de los Errores (SSE), el valor que el método de Mínimos Cuadrados minimiza.
Ajuste de una Función de Vibración Amortiguada: Ajusta una señal de vibración amortiguada \(y(t) = A e^{-\zeta t} \cos(\omega t + \phi)\).
- Tarea: Define la función y usa
curve_fitpara ajustar \(t = [0, 0.5, 1.0, 1.5, 2.0, 2.5]\) y \(y = [5.0, 3.5, 1.5, -0.1, -1.0, -0.9]\). (Asume \(\omega=5\) y \(\phi=0\) conocidos, solo ajusta \(A\) y \(\zeta\)).
- Tarea: Define la función y usa
Interpolación Extrema y Segmentación:
- Pregunta de Análisis: Si la función tiene un cambio de régimen abrupto (ej. un límite elástico), ¿por qué es mejor realizar la regresión o la interpolación Spline en dos segmentos separados?
Interpolación vs. Regresión (Decisión de Ingeniería): Tienes 1000 mediciones de presión con error de \(\pm 5 \text{ kPa}\). Necesitas el valor de la presión en \(t=5.5 \text{ min}\).
- Pregunta de Decisión: ¿Debes usar la Interpolación Spline Cúbica o la Regresión Polinomial? Justifica tu elección.