Cómo realizar una regresión lineal simple en Python (paso a paso)

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

La regresión lineal simple es una técnica que podemos utilizar para comprender la relación entre una única variable explicativa y una única variable de respuesta .

Esta técnica encuentra la línea que mejor se «ajusta» a los datos y adopta la siguiente forma:

ŷ = segundo 0 + segundo 1 x

dónde:

  • ŷ : el valor de respuesta estimado
  • b 0 : la intersección de la línea de regresión
  • b 1 : La pendiente de la recta de regresión

Esta ecuación puede ayudarnos a comprender la relación entre la variable explicativa y la de respuesta, y (asumiendo que es estadísticamente significativa) puede usarse para predecir el valor de una variable de respuesta dado el valor de la variable explicativa.

Este tutorial proporciona una explicación paso a paso de cómo realizar una regresión lineal simple en Python.

Paso 1: cargue los datos

Para este ejemplo, crearemos un conjunto de datos falso que contiene las siguientes dos variables para 15 estudiantes:

  • Total de horas estudiadas para algún examen
  • Puntaje de examen

Intentaremos ajustar un modelo de regresión lineal simple utilizando las horas como variable explicativa y la puntuación del examen como variable de respuesta.

El siguiente código muestra cómo crear este conjunto de datos falso en Python:

importar pandas como pd

#create dataset 
df = pd. DataFrame ({' horas ': [1, 2, 4, 5, 5, 6, 6, 7, 8, 10, 11, 11, 12, 12, 14],
                   ' puntuación ': [64, 66, 76, 73, 74, 81, 83, 82, 80, 88, 84, 82, 91, 93, 89]})
      

#ver las primeras seis filas del conjunto de datos
 df [0: 6]

    puntaje de horas
0 1 64
1 2 66
2 4 76
3 5 73
4 5 74
5 6 81

Paso 2: Visualice los datos

Antes de ajustar un modelo de regresión lineal simple, primero debemos visualizar los datos para comprenderlos.

Primero, queremos asegurarnos de que la relación entre horas y puntaje sea ​​aproximadamente lineal, ya que ese es un supuesto subyacente de la regresión lineal simple.

Podemos crear un diagrama de dispersión simple para ver la relación entre las dos variables:

importar matplotlib.pyplot como plt

plt. dispersión (df.hours, df.score)
plt. título (' Horas estudiadas vs. Puntaje del examen ')
plt. xlabel (' Horas ')
plt. ylabel (' Puntuación ')
plt. mostrar ()

Diagrama de dispersión en Python

En la gráfica podemos ver que la relación parece ser lineal. A medida que aumentan las horas , la puntuación tiende a aumentar también de forma lineal.

A continuación, podemos crear un diagrama de caja para visualizar la distribución de las puntuaciones de los exámenes y comprobar si hay valores atípicos . De forma predeterminada, Python define una observación como un valor atípico si es 1,5 veces el rango intercuartil mayor que el tercer cuartil (Q3) o 1,5 veces el rango intercuartílico menor que el primer cuartil (Q1).

Si una observación es un valor atípico, aparecerá un círculo pequeño en la gráfica de caja:

df. diagrama de caja (columna = [' puntuación '])

Diagrama de caja en Python

No hay círculos pequeños en el diagrama de caja, lo que significa que no hay valores atípicos en nuestro conjunto de datos.

Paso 3: realizar una regresión lineal simple

Una vez que hayamos confirmado que la relación entre nuestras variables es lineal y que no hay valores atípicos presentes, podemos proceder a ajustar un modelo de regresión lineal simple utilizando las horas como variable explicativa y la puntuación como variable de respuesta:

Nota: Usaremos la función OLS () de la biblioteca statsmodels para ajustar el modelo de regresión.

importar statsmodels.api como sm

#define la variable de respuesta
 y = df [' puntuación ']

#definir variable explicativa
 x = df [[' horas ']]

#add constante a las variables predictoras
 x = sm. add_constant (x)

#fit modelo de regresión lineal
 modelo = sm. MCO (y, x). encajar ()

#ver impresión de resumen del modelo
 (model.summary ())

                            Resultados de regresión de OLS                            
================================================ ============================
Dep. Variable: puntuación R cuadrado: 0,831
Modelo: OLS Adj. R cuadrado: 0.818
Método: Estadístico F de mínimos cuadrados: 63,91
Fecha: lunes, 26 de octubre de 2020 Prob (estadística F): 2.25e-06
Hora: 15:51:45 Log-Probabilidad: -39.594
No. Observaciones: 15 AIC: 83.19
Residuos Df: 13 BIC: 84.60
Modelo Df: 1                                         
Tipo de covarianza: no robusto                                         
================================================ ============================
                 coef std err t P> | t | [0.025 0.975]
-------------------------------------------------- ----------------------------
const 65.3340 2.106 31.023 0.000 60.784 69.884
horas 1.9824 0.248 7.995 0.000 1.447 2.518
================================================ ============================
Ómnibus: 4.351 Durbin-Watson: 1.677
Problema (Ómnibus): 0.114 Jarque-Bera (JB): 1.329
Sesgo: 0.092 Prob (JB): 0.515
Curtosis: 1,554 Cond. No. 19.2
================================================ ============================

En el resumen del modelo podemos ver que la ecuación de regresión ajustada es:

Puntuación = 65,334 + 1,9824 * (horas)

Esto significa que cada hora adicional estudiada está asociada con un aumento promedio en la puntuación del examen de 1,9824 puntos. Y el valor de intersección de 65,334 nos dice el puntaje promedio esperado en el examen para un estudiante que estudia cero horas.

También podemos usar esta ecuación para encontrar el puntaje esperado del examen basado en la cantidad de horas que estudia un estudiante. Por ejemplo, se espera que un estudiante que estudia durante 10 horas reciba una puntuación en el examen de 85.158 :

Puntuación = 65,334 + 1,9824 * (10) = 85,158

A continuación, se explica cómo interpretar el resto del resumen del modelo:

  • P> | t |: Este es el valor p asociado con los coeficientes del modelo. Dado que el valor de p para las horas (0,000) es significativamente menor que .05, podemos decir que existe una asociación estadísticamente significativa entre las horas y la puntuación .
  • R cuadrado: este número nos dice que el porcentaje de variación en los puntajes del examen se puede explicar por la cantidad de horas estudiadas. En general, cuanto mayor sea el valor R cuadrado de un modelo de regresión, mejor podrán las variables explicativas predecir el valor de la variable de respuesta. En este caso, el 83,1% de la variación en las puntuaciones se puede explicar por horas estudiadas.
  • Estadístico F y valor p: el estadístico F ( 63,91 ) y el valor p correspondiente ( 2,25e-06 ) nos indican la significación general del modelo de regresión, es decir, si las variables explicativas del modelo son útiles para explicar la variación. en la variable de respuesta. Dado que el valor p en este ejemplo es menor que .05, nuestro modelo es estadísticamente significativo y se considera que las horas son útiles para explicar la variación en la puntuación .

Paso 4: crear parcelas residuales

Después de ajustar el modelo de regresión lineal simple a los datos, el último paso es crear gráficos de residuos.

Uno de los supuestos clave de la regresión lineal es que los residuos de un modelo de regresión se distribuyen aproximadamente normalmente y son homocedásticos en cada nivel de la variable explicativa. Si se violan estos supuestos, los resultados de nuestro modelo de regresión podrían ser engañosos o poco fiables.

Para verificar que se cumplan estos supuestos, podemos crear las siguientes gráficas de residuos:

Gráfica de valores residuales vs. ajustados: Esta gráfica es útil para confirmar la homocedasticidad. El eje x muestra los valores ajustados y el eje y muestra los residuos. Siempre que los residuos parezcan estar distribuidos de manera aleatoria y uniforme en todo el gráfico alrededor del valor cero, podemos suponer que no se viola la homocedasticidad:

#define el tamaño de la figura
 fig = plt. figura (figsize = (12,8))

#producir gráficos residuales
 fig = sm.graphics. plot_regress_exog (modelo, ' horas ', fig = fig)

Gráficos residuales en Python

Se producen cuatro parcelas. El de la esquina superior derecha es el gráfico residual vs. ajustado. El eje x de este gráfico muestra los valores reales de los puntos de la variable predictora y el eje y muestra el residual de ese valor.

Dado que los residuos parecen estar distribuidos aleatoriamente alrededor de cero, esto es una indicación de que la heterocedasticidad no es un problema con la variable explicativa.

Gráfico QQ: este gráfico es útil para determinar si los residuos siguen una distribución normal. Si los valores de los datos en el gráfico caen a lo largo de una línea aproximadamente recta en un ángulo de 45 grados, entonces los datos se distribuyen normalmente:

#definir residuales
 res = modelo. resid

#create QQ plot
 fig = sm. qqplot (res, fit = True , line = " 45 ")
plt.show () 

Gráfico QQ en Python

Los residuos se desvían un poco de la línea de 45 grados, pero no lo suficiente como para causar una gran preocupación. Podemos suponer que se cumple el supuesto de normalidad.

Dado que los residuos se distribuyen normalmente y son homocedásticos, hemos verificado que se cumplen los supuestos del modelo de regresión lineal simple. Por lo tanto, la salida de nuestro modelo es confiable.

El código Python completo utilizado en este tutorial se puede encontrar aquí .

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

Deja un comentario

A menudo, es posible que desee calcular las frecuencias relativas / proporciones de valores en una o más columnas 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!