sqlpostgresqlregressionstatistics

REGR_R2 en SQL: R-cuadrado y bondad de ajuste de la regresion

Como REGR_R2 mide la calidad de una regresion lineal en SQL y por que conviene leerlo junto a REGR_SLOPE.

3 min de lecturaReferencesql · postgresql · regression · statistics · analytics

REGR_R2 devuelve el coeficiente de determinacion (R-cuadrado) de una regresion lineal: un numero entre 0 y 1 que indica que parte de la varianza de la variable dependiente explica realmente la recta de regresion. Es el valor que responde a la pregunta "?puedo fiarme de la pendiente que acaba de calcular REGR_SLOPE?".

Sintaxis e idea central

Los argumentos coinciden con el resto de funciones REGR_*: primero la variable dependiente y y luego la independiente x.

SELECT REGR_R2(y, x) FROM points;

La intuicion es sencilla: el R-cuadrado compara tu modelo contra el modelo mas tonto posible, "predecir siempre la media de y". Si la recta ajustada no mejora esa media, el R-cuadrado ronda 0. Si la recta pasa exactamente por cada punto, el R-cuadrado es 1.

  • 1.0 — recta perfecta, todos los puntos caen sobre ella.
  • 0.0 — la pendiente es inutil, x no explica nada de y.
  • 0.7 — la recta explica el 70% de la varianza de y.

Validar una tendencia de ingresos

Supongamos que agregamos los totales de pedidos por dia y queremos saber si los ingresos suben de verdad con el tiempo o es solo ruido. Calcula primero la pendiente y despues la bondad de ajuste.

WITH daily AS (
    SELECT
        date_trunc('day', created_at) AS day,
        SUM(amount) AS revenue
    FROM orders
    WHERE status = 'paid'
    GROUP BY 1
)
SELECT
    REGR_SLOPE(revenue, EXTRACT(EPOCH FROM day)) AS slope,
    REGR_R2(revenue, EXTRACT(EPOCH FROM day))    AS r2,
    COUNT(*)                                      AS days
FROM daily;

Si slope > 0 pero r2 vale, por ejemplo, 0.04, el "crecimiento" es una ilusion: la dispersion diaria es enorme y la recta no explica casi nada. En cambio, slope > 0 junto a r2 = 0.8 si es una tendencia estable y creible.

Relacion con CORR al cuadrado

En una regresion lineal simple (un solo predictor) existe una identidad exacta: REGR_R2(y, x) es igual al cuadrado del coeficiente de correlacion de Pearson CORR(y, x). Eso sirve como comprobacion rapida.

SELECT
    REGR_R2(salary, manager_id)        AS r2,
    POWER(CORR(salary, manager_id), 2) AS corr_squared
FROM employees
WHERE manager_id IS NOT NULL;

Ambas columnas coincidiran salvo por el error de coma flotante. De aqui sale tambien la limitacion clave: el R-cuadrado mide solo la dependencia lineal. Una parabola perfecta puede dar un R-cuadrado cercano a cero aunque las variables esten ferreamente relacionadas.

Segmentar por pais

El R-cuadrado brilla dentro de un GROUP BY: en lugar de una sola tendencia para todos, obtienes una puntuacion de fiabilidad por segmento y descartas los ruidosos al instante.

SELECT
    u.country,
    REGR_SLOPE(o.amount, EXTRACT(EPOCH FROM o.created_at)) AS slope,
    REGR_R2(o.amount, EXTRACT(EPOCH FROM o.created_at))    AS r2,
    COUNT(*)                                                AS n
FROM orders o
JOIN users u ON u.id = o.user_id
GROUP BY u.country
HAVING COUNT(*) >= 30
ORDER BY r2 DESC;

La clausula HAVING COUNT(*) >= 30 no es cosmetica, es una proteccion: con dos puntos el R-cuadrado siempre vale 1 y, sin un umbral minimo, confundiras coincidencias aleatorias con patrones.

Trampas

  • Un R-cuadrado alto no es causalidad. Solo dice que la recta describe bien los datos, no que x provoque y.
  • Los NULL se descartan por pares. Si x o y es NULL, esa fila simplemente no participa, igual que en REGR_SLOPE/CORR.
  • No existe en MySQL. Ni REGR_R2 ni las demas funciones REGR_* vienen en el MySQL estandar; tendras que calcularlo a mano con un equivalente de CORR o con varianzas. ClickHouse tampoco tiene REGR_R2, pero sus estadisticas con ventana permiten construir el R-cuadrado con una formula.
  • Solo linealidad. Un R-cuadrado cercano a cero significa "no hay relacion lineal", no "no hay relacion". Echa un vistazo al grafico antes de concluir.

Regla practica: calcula siempre REGR_SLOPE y REGR_R2 juntos. La pendiente da direccion y magnitud; el R-cuadrado te dice si vale la pena mirar esa pendiente.

Practica con ejercicios reales

Resuelve ejercicios en el entrenador de SQL con corrección instantánea y pistas.

Abrir el entrenador