Cómo realizar una regresión cuadrática en Python

Actualizado por ultima vez el 7 de mayo de 2021, por .

La regresión cuadrática es un tipo de regresión que podemos usar para cuantificar la relación entre una variable predictora y una variable de respuesta cuando las relaciones verdaderas son cuadráticas, que pueden verse como una «U» o una «U» invertida en un gráfico.

Es decir, cuando la variable de predicción aumenta, la variable de respuesta también tiende a aumentar, pero después de cierto punto la variable de respuesta comienza a disminuir a medida que la variable de predicción sigue aumentando.

Este tutorial explica cómo realizar una regresión cuadrática en Python.

Ejemplo: regresión cuadrática en Python

Supongamos que tenemos datos sobre la cantidad de horas trabajadas por semana y el nivel de felicidad informado (en una escala de 0 a 100) para 16 personas diferentes:

importar numpy como np
 importar scipy.stats como estadísticas

#add leyenda
horas = [6, 9, 12, 12, 15, 21, 24, 24, 27, 30, 36, 39, 45, 48, 57, 60]
happy = [12, 18, 30, 42, 48, 78, 90, 96, 96, 90, 84, 78, 66, 54, 36, 24]

Si hacemos un diagrama de dispersión simple de estos datos, podemos ver que la relación entre las dos variables tiene forma de «U»:

importar matplotlib.pyplot como plt

#create scatterplot
 plt.scatter (horas, happy)

A medida que aumentan las horas trabajadas, la felicidad también aumenta, pero una vez que las horas trabajadas pasan alrededor de 35 horas por semana, la felicidad comienza a disminuir.

Debido a esta forma de «U», esto significa que la regresión cuadrática es probablemente un buen candidato para cuantificar la relación entre las dos variables.

Para realizar realmente la regresión cuadrática, podemos ajustar un modelo de regresión polinomial con un grado de 2 usando la función numpy.polyfit () :

importar numpy como np

# ajuste polinomial con grado = 2
 modelo = np.poly1d (np.polyfit (horas, happ, 2))

#add línea polinomial ajustada al diagrama de dispersión
 polilínea = np.linspace (1, 60, 50)
plt.scatter (horas, happy)
plt.plot (polilínea, modelo (polilínea))
plt.show ()

Regresión cuadrática en Python

Podemos obtener la ecuación de regresión polinomial ajustada imprimiendo los coeficientes del modelo:

imprimir (modelo)

-0,107 x 2 + 7,173 x - 30,25

La ecuación de regresión cuadrática ajustada es:

Felicidad = -0.107 (horas) 2 + 7.173 (horas) – 30.25

Podemos usar esta ecuación para calcular el nivel de felicidad esperado de un individuo en función de sus horas trabajadas. Por ejemplo, el nivel de felicidad esperado de alguien que trabaja 30 horas a la semana es:

Felicidad = -0,107 (30) 2 + 7,173 (30) – 30,25 = 88,64 .

También podemos escribir una función corta para obtener el R cuadrado del modelo, que es la proporción de la varianza en la variable de respuesta que se puede explicar por las variables predictoras.

#define función para calcular r-cuadrado 
def polyfit (x, y, grado):
    resultados = {}
    coeffs = np.polyfit (x, y, grado)
    p = np.poly1d (coeff)
    #calcular r-cuadrado
    yhat = p (x)
    ybar = np.sum (y) / len (y)
    ssreg = np.sum ((yhat-ybar) ** 2)
    sstot = np.sum ((y - ybar) ** 2)
    resultados ['r_squared'] = ssreg / sstot

    devolver resultados

# encontrar r-cuadrado de modelo polinomial con grado = 3
 polyfit (horas, happ, 2)

{'r_squared': 0.9092114182131691}

En este ejemplo, el R-cuadrado del modelo es 0.9092 . Esto significa que el 90,92% de la variación en los niveles de felicidad informados puede explicarse por las variables predictoras.

Recursos adicionales

Cómo realizar una regresión polinomial en Python
Cómo realizar una regresión cuadrática en R
Cómo realizar una regresión cuadrática en Excel

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

El índice de diversidad de Shannon (a veces llamado índice de Shannon-Wiener) es una forma de medir la diversidad de…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!