Módulo 2: Regresión logarı́tmica tipo ley de potencias
Serie de aprendizaje en Google Colab
Contexto
Muchos fenómenos fı́sicos siguen leyes empı́ricas del tipo:
q
L
Y = a · Rem · F rn · W ep ·
H
Estas expresiones pueden derivarse de principios de similitud, análisis dimensional o resultados
de simulaciones. A través de regresión logarı́tmica, podemos ajustar los parámetros a, m, n, p, q
directamente desde datos observacionales o numéricos.
Transformación logarı́tmica
Aplicando logaritmo natural:
L
log(Y ) = log(a) + m log(Re) + n log(F r) + p log(W e) + q log
H
Esto linealiza la relación, permitiendo utilizar regresión lineal múltiple para estimar los exponentes.
Código Python explicado
Importación de librerı́as
import numpy as np
import pandas as pd
import matplotlib . pyplot as plt
from sklearn . linear_model import LinearRegression
from sklearn . metrics import mean_squared_error , r2_score
Generación de datos
Creamos un conjunto sintético con una ley de potencias conocida.
np . random . seed (0)
n = 300
Re = np . random . uniform (100 , 10000 , n )
Fr = np . random . uniform (0.1 , 5 , n )
We = np . random . uniform (1 , 100 , n )
LH = np . random . uniform (0.1 , 10 , n )
Vmax = 2.5 * ( Re **0.5) * ( Fr **0.3) / ( We **0.2 * LH **0.1)
Vmax *= np . exp (0.05 * np . random . randn ( n ) ) # ruido log - normal
1
Transformación de variables
Aplicamos logaritmo a las variables para linealizar el modelo.
data = pd . DataFrame ({ ’ Re ’: Re , ’ Fr ’: Fr , ’ We ’: We , ’ LH ’: LH , ’ Vmax ’: Vmax })
logX = np . log ( data [[ ’ Re ’ , ’ Fr ’ , ’ We ’ , ’ LH ’ ]])
logY = np . log ( data [ ’ Vmax ’ ])
Ajuste del modelo
Entrenamos un modelo lineal sobre los datos transformados.
model = LinearRegression ()
model . fit ( logX , logY )
coefs = model . coef_
intercept = model . intercept_
print ( " Coeficientes : " , coefs )
print ( " Intercepto ( log a ) : " , intercept )
Reconstrucción del modelo fı́sico
a = np . exp ( intercept )
print ( f " Vmax { a :.3 f } * Re ^{ coefs [0]:.3 f } * Fr ^{ coefs [1]:.3 f } * We ^{ coefs [2]:.3 f
,→ } * ( L / H ) ^{ coefs [3]:.3 f } " )
Evaluación del modelo
logY_pred = model . predict ( logX )
r2 = r2_score ( logY , logY_pred )
rmse = np . sqrt ( mean_squared_error ( logY , logY_pred ) )
print ( f " R ^2: { r2 :.4 f } , RMSE : { rmse :.4 f } " )
Visualización
plt . scatter ( np . exp ( logY ) , np . exp ( logY_pred ) , alpha =0.6)
plt . plot ([ min ( Vmax ) , max ( Vmax ) ] , [ min ( Vmax ) , max ( Vmax ) ] , ’r - - ’)
plt . xlabel ( " Vmax real " )
plt . ylabel ( " Vmax predicho " )
plt . title ( " P r e d i c c i n en escala original " )
plt . grid ( True )
plt . show ()
Conclusión
Este enfoque permite obtener una expresión matemática interpretativa a partir de datos. Es ideal
cuando se sospecha de leyes escalares o relaciones de tipo monomial.
2
Apéndice B: Fundamentos de regresión log-log
B.1 Definición
Dado:
k k
Xiβi
Y X
Y =a· ⇒ log(Y ) = log(a) + βi log(Xi )
i=1 i=1
B.2 Estimación
Se realiza mediante mı́nimos cuadrados ordinarios:
min ∥ỹ − Xβ∥2
β
B.3 Interpretación
• Cada βi representa un exponente fı́sico interpretable.
• exp(β0 ) es el coeficiente multiplicativo.
B.4 Ventajas
• Produce fórmulas explı́citas y diferenciables.
• Compatible con análisis dimensional.
• Fácilmente verificable por visualización log-log.
B.5 Referencias
Montgomery, D. C., et al. (2012). Introduction to Linear Regression Analysis. Wiley.
Pope, S. B. (2000). Turbulent Flows. Cambridge University Press.