📈 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.