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.
REGR_R2devuelve 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 calcularREGR_SLOPE?".Sintaxis e idea central
Los argumentos coinciden con el resto de funciones
REGR_*: primero la variable dependienteyy luego la independientex.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,xno explica nada dey.0.7— la recta explica el 70% de la varianza dey.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 > 0peror2vale, por ejemplo,0.04, el "crecimiento" es una ilusion: la dispersion diaria es enorme y la recta no explica casi nada. En cambio,slope > 0junto ar2 = 0.8si 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 PearsonCORR(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(*) >= 30no 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
xprovoquey.xoyes NULL, esa fila simplemente no participa, igual que enREGR_SLOPE/CORR.REGR_R2ni las demas funcionesREGR_*vienen en el MySQL estandar; tendras que calcularlo a mano con un equivalente deCORRo con varianzas. ClickHouse tampoco tieneREGR_R2, pero sus estadisticas con ventana permiten construir el R-cuadrado con una formula.Regla practica: calcula siempre
REGR_SLOPEyREGR_R2juntos. La pendiente da direccion y magnitud; el R-cuadrado te dice si vale la pena mirar esa pendiente.