Saltar al contenido

¿Cómo calculo r-squared usando Python y Numpy?

Nuestro grupo de trabajo ha estado largas horas investigando la respuesta a tus interrogantes, te dejamos la resolución así que deseamos servirte de mucha apoyo.

Solución:

Una respuesta muy tardía, pero en caso de que alguien necesite una función lista para esto:

scipy.stats.linregress

es decir

slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(x, y)

como en la respuesta de @Adam Marples.

De la documentación numpy.polyfit, se ajusta a la regresión lineal. Específicamente, numpy.polyfit con grado ‘d’ ajusta una regresión lineal con la función media

E(y|x) = p_d * x**d + p_d-1 * x **(d-1) + … + p_1 * x + p_0

Entonces solo necesita calcular el R-cuadrado para ese ajuste. La página de wikipedia sobre regresión lineal brinda detalles completos. Está interesado en R ^ 2, que puede calcular de varias maneras, siendo probablemente la más fácil

SST = Sum(i=1..n) (y_i - y_bar)^2
SSReg = Sum(i=1..n) (y_ihat - y_bar)^2
Rsquared = SSReg/SST

Donde uso ‘y_bar’ para la media de las y, y ‘y_ihat’ para ser el valor de ajuste para cada punto.

No estoy muy familiarizado con numpy (generalmente trabajo en R), por lo que probablemente haya una forma más ordenada de calcular su R-cuadrado, pero lo siguiente debería ser correcto

import numpy

# Polynomial Regression
def polyfit(x, y, degree):
    results = 

    coeffs = numpy.polyfit(x, y, degree)

     # Polynomial Coefficients
    results['polynomial'] = coeffs.tolist()

    # r-squared
    p = numpy.poly1d(coeffs)
    # fit values, and mean
    yhat = p(x)                         # or [p(z) for z in x]
    ybar = numpy.sum(y)/len(y)          # or sum(y)/len(y)
    ssreg = numpy.sum((yhat-ybar)**2)   # or sum([ (yihat - ybar)**2 for yihat in yhat])
    sstot = numpy.sum((y - ybar)**2)    # or sum([ (yi - ybar)**2 for yi in y])
    results['determination'] = ssreg / sstot

    return results

De yanl (otra biblioteca más) sklearn.metrics tiene un r2_score función;

from sklearn.metrics import r2_score

coefficient_of_dermination = r2_score(y, p(x))

Al final de todo puedes encontrar los comentarios de otros programadores, tú igualmente tienes el poder insertar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *