Entrada

📊 ¿Qué es OLS (Mínimos Cuadrados Ordinarios)?

OLS significa Ordinary Least Squares en inglés, o Mínimos Cuadrados Ordinarios en español.

Imagina que tienes muchos puntos dibujados en un gráfico. Cada punto representa una persona y muestra:

  • Cuánto fue su pulso promedio (Average_Pulse)
  • Cuántas calorías quemó (Calorie_Burnage)

📈 Lo que queremos es dibujar una línea recta que pase lo más cerca posible de todos los puntos.
Esa línea sirve para hacer predicciones. Por ejemplo:

“Si alguien tiene un pulso promedio de 140, quemará más o menos X calorías.”

OLS es una técnica matemática que busca la mejor línea recta posible.
Para hacerlo, mide qué tan lejos están los puntos de la línea, y encuentra la línea que minimiza el error total (los errores se elevan al cuadrado para evitar negativos y dar más peso a los errores grandes).


🐍 Ejemplo en Python paso a paso

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd
import statsmodels.formula.api as smf

# Cargar los datos desde un archivo CSV
full_health_data = pd.read_csv("data.csv", header=0, sep=",")

# Crear el modelo de regresión lineal con OLS
model = smf.ols('Calorie_Burnage ~ Average_Pulse', data = full_health_data)

# Ajustar (entrenar) el modelo con los datos
results = model.fit()

# Mostrar un resumen con los resultados
print(results.summary())

🧠 Explicación del código

import pandas as pd

Importa la librería pandas, que se usa para leer y trabajar con datos en forma de tabla (como Excel).

import statsmodels.formula.api as smf

Importa la librería statsmodels, que permite hacer modelos estadísticos como la regresión lineal OLS.

full_health_data = pd.read_csv("data.csv")

Lee un archivo CSV llamado data.csv, que contiene los datos de personas: pulso promedio y calorías quemadas.

model = smf.ols('Calorie_Burnage ~ Average_Pulse', data=...)

Crea un modelo OLS que quiere predecir Calorie_Burnage a partir de Average_Pulse.

🗣 Traducción:

“Intenta dibujar una línea que relacione el pulso promedio con las calorías quemadas.”

results = model.fit()

Ajusta (entrena) el modelo. Calcula cuál es la mejor línea posible usando los datos.

print(results.summary())

Muestra el resumen del modelo con todos los detalles y estadísticas.


🧾 ¿Qué dice el resumen?

Aquí está lo que verás al imprimir results.summary():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                            OLS Regression Results
==============================================================================
Dep. Variable:        Calorie_Burnage   R-squared:                       0.000
Model:                            OLS   Adj. R-squared:                 -0.006
Method:                 Least Squares   F-statistic:                   0.04975
Date:                Tue, 24 Nov 2020   Prob (F-statistic):              0.824
Time:                        12:26:11   Log-Likelihood:                -1145.8
No. Observations:                 163   AIC:                             2296.
Df Residuals:                     161   BIC:                             2302.
Df Model:                           1
Covariance Type:            nonrobust
=================================================================================
                    coef    std err          t      P>|t|      [0.025      0.975]
---------------------------------------------------------------------------------
Intercept       346.8662    160.615      2.160      0.032      29.682     664.050
Average_Pulse     0.3296      1.478      0.223      0.824      -2.588       3.247
==============================================================================
Omnibus:                      124.542   Durbin-Watson:                   1.620
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              938.541
Skew:                           2.927   Prob(JB):                    1.58e-204
Kurtosis:                      13.195   Cond. No.                         811.
==============================================================================

🧾 Salida completa de results.summary() (Explicación en 3 bloques)

####🔹 Bloque 1: Información general del modelo

1
2
3
4
5
6
7
8
9
10
11
                            OLS Regression Results
==============================================================================
Dep. Variable:        Calorie_Burnage   R-squared:                       0.000
Model:                            OLS   Adj. R-squared:                 -0.006
Method:                 Least Squares   F-statistic:                   0.04975
Date:                Tue, 24 Nov 2020   Prob (F-statistic):              0.824
Time:                        12:26:11   Log-Likelihood:                -1145.8
No. Observations:                 163   AIC:                             2296.
Df Residuals:                     161   BIC:                             2302.
Df Model:                           1
Covariance Type:            nonrobust

🧠 ¿Qué significa cada cosa?

  • Dep. Variable: la variable que queremos predecir (en este caso, Calorie_Burnage)
  • R-squared (R²): 0.000 → el modelo no explica casi nada de la variación.
  • Adj. R-squared: como R² pero ajustado por el número de variables. Aquí también es malo.
  • F-statistic y Prob (F-statistic): indican si el modelo completo tiene sentido. Aquí no: p = 0.824 (mayor que 0.05).
  • Log-Likelihood, AIC, BIC: son medidas técnicas de calidad del modelo (valores más bajos = mejor). Son útiles para comparar varios modelos.
  • No. Observations: número de datos que se usaron (163).
  • Df Model y Df Residuals: grados de libertad. Aquí hay 1 predictor (Average_Pulse), y 161 residuos.

🔹 Bloque 2: Tabla de coeficientes (la ecuación del modelo)

1
2
3
4
5
6
=================================================================================
                    coef    std err          t      P>|t|      [0.025      0.975]
---------------------------------------------------------------------------------
Intercept       346.8662    160.615      2.160      0.032      29.682     664.050
Average_Pulse     0.3296      1.478      0.223      0.824      -2.588       3.247
=================================================================================

Esto representa la ecuación de la recta:

📏 Calorie_Burnage = 346.87 + 0.33 × Average_Pulse

Pero:

  • P>|t| para Average_Pulse es 0.824, muy alto → no es un predictor válido.
  • Si es menor de 0.05, es importante.
  • El intervalo de confianza [0.025, 0.975] para Average_Pulse incluye el 0 → tampoco hay efecto claro.
  • En este caso, Average_Pulse tiene un p = 0.824, lo cual significa que es casi seguro que NO hay relación entre pulso y calorías.

✅ El intercepto sí es significativo (p = 0.032), pero no sirve de mucho si el predictor no explica nada.


🔹 Bloque 3: Diagnóstico del modelo (calidad de los residuos)

1
2
3
4
Omnibus:                      124.542   Durbin-Watson:                   1.620
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              938.541
Skew:                           2.927   Prob(JB):                    1.58e-204
Kurtosis:                      13.195   Cond. No.                         811.

🧪 Este bloque analiza si los errores del modelo (residuos) se comportan como deberían.

  • Omnibus, JB, Prob(JB): pruebas de normalidad. Aquí el p-valor es muy bajo → los errores no son normales.
  • Skew (asimetría): 2.927 → mucha asimetría. Idealmente debería ser 0.
  • Kurtosis: 13.195 → muy alto. Debería estar cerca de 3.
  • Durbin-Watson: 1.620 → mide autocorrelación. Valores cerca de 2 son aceptables.
  • Cond. No. (número de condición): 811 → indica posible multicolinealidad. Menor de 30 = bien; más de 1000 = problema.

🖼️ Representación gráfica

regresion_lineal_ols

Cruces amarillas: son los datos reales de personas: su pulso promedio y calorías quemadas.

Línea roja: es la línea que OLS ha intentado ajustar. Como puedes ver, está casi horizontal porque no hay relación clara entre los datos.

Es como si el modelo dijera:

“Da igual el pulso, la cantidad de calorías quemadas no cambia mucho.”

Por eso el R-squared era cercano a 0.


🧃 ¿En resumen sencillo?

  • OLS es una técnica que dibuja la mejor línea recta entre dos cosas (por ejemplo, pulso y calorías).
  • En tu código, OLS intentó encontrar esa línea.
  • Pero el resultado dice que no hay relación: el pulso no ayuda a predecir cuántas calorías quema una persona, al menos con estos datos.
Esta entrada está licenciada bajo CC BY 4.0 por el autor.