Cómo crear un gráfico residual en Python

Una gráfica de residuos es un gráfico en el que los residuos se muestran en el eje y y la variable independiente se muestra en el eje x. Un modelo de regresión lineal es apropiado para los datos si los puntos en una gráfica de residuos se distribuyen aleatoriamente a lo largo del eje horizontal. Veamos cómo crear un gráfico residual en Python.

Método 1: Usar plot_regress_exog()

plot_regress_exog():

  • Compare los resultados de la regresión con un regresor.
  • ‘endog frente a exog’, ‘residuales frente a exog’, ‘ajustado frente a exog’ y ‘ajustado más residual frente a exog’ se trazan en una figura de 2 por 2.

Sintaxis: statsmodels.graphics.regressionplots.plot_regress_exog(resultados, exog_idx, fig=Ninguno)

Parámetros:

  • resultados: instancia de resultado
  • exog_idx: índice o nombre del regresor
  • fig : se crea una figura si no se proporciona ninguna figura

Devoluciones: figura 2X2

Regresión lineal simple

Después de importar los paquetes necesarios y leer el archivo CSV, usamos ols() de statsmodels.formula.api para ajustar los datos a la regresión lineal. creamos una figura y pasamos esa figura, el nombre de la variable independiente y el modelo de regresión al método plot_regress_exog(). se muestra una figura 2X2 de parcelas residuales. En el método ols() la string antes de ‘~’ es la variable dependiente o la variable que estamos tratando de predecir y después de ‘~’ vienen las variables independientes. para la regresión lineal, hay una variable dependiente y una variable independiente.

ols(‘variable_respuesta ~ variable_predictor’, datos= datos)

CSV utilizado: headbrain3

Python3

# import packages and libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols
  
# reading the csv file
data = pd.read_csv('headbrain3.csv')
  
# fit simple linear regression model
linear_model = ols('Brain_weight ~ Head_size',
                   data=data).fit()
  
# display model summary
print(linear_model.summary())
  
# modify figure size
fig = plt.figure(figsize=(14, 8))
  
# creating regression plots
fig = sm.graphics.plot_regress_exog(linear_model,
                                    'Head_size',
                                    fig=fig)

Producción:

Podemos ver que los puntos se trazan aleatoriamente dispersos o dispersos. los puntos o residuos están dispersos alrededor de la línea ‘0’, no hay un patrón y los puntos no se basan en un lado, por lo que no hay problema de heteroscedasticidad. con la variable predictora ‘Head_size’ no hay heterocedasticidad. 

Regresión lineal múltiple:

En la regresión lineal múltiple, tenemos más de variables independientes o variables predictoras y una variable dependiente. El código es similar a la regresión lineal excepto que tenemos que hacer este cambio en el método ols().

ols(‘variable_respuesta ~ variable_predictor1+ variable_predictor2 +…. ‘, datos= datos)

‘+’ se usa para agregar cuántas predictor_variables queremos al crear el modelo. 

CSV Usado: precios de viviendas

Ejemplo 1:

Python3

# import packages and libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols
  
# reading the csv file
data = pd.read_csv('homeprices.csv')
data
  
# fit multi linear regression model
multi_model = ols('price ~ area + bedrooms', data=data).fit()
  
# display model summary
print(multi_model.summary())
  
# modify figure size
fig = plt.figure(figsize=(14, 8))
  
# creating regression plots
fig = sm.graphics.plot_regress_exog(multi_model, 'area', fig=fig)

Producción:

Podemos ver que los puntos se trazan aleatoriamente dispersos o dispersos. los puntos o residuos están dispersos alrededor de la línea ‘0’, no hay un patrón y los puntos no se basan en un lado, por lo que no hay problema de heteroscedasticidad. Con la variable predictora ‘área’ no hay heterocedasticidad. 

Ejemplo 2:

Python3

# import packages and libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols
  
# reading the csv file
data = pd.read_csv('homeprices.csv')
data
  
# fit multi linear regression model
multi_model = ols('price ~ area + bedrooms', data=data).fit()
  
# modify figure size
fig = plt.figure(figsize=(14, 8))
  
# creating regression plots
fig = sm.graphics.plot_regress_exog(multi_model, 'bedrooms', fig=fig)

Producción:

 podemos ver que los puntos se trazan aleatoriamente dispersos o dispersos. los puntos o residuos están dispersos alrededor de la línea ‘0’, no hay patrón y los puntos no se basan en un lado, por lo que no hay problema de heteroscedasticidad. con la variable predictora ‘dormitorios’ no hay heterocedasticidad. 

Método 2: Usar seaborn.residplot()

seaborn.residplot(): esta función retrocederá y en x y luego trazará los residuos como un diagrama de dispersión. Puede ajustar un suavizador lowess a la gráfica residual como una opción, lo que puede ayudar a detectar si los residuales tienen estructura.

Sintaxis: seaborn.residplot(*, x=Ninguno, y=Ninguno, data=Ninguno, lowess=False, x_partial=Ninguno, y_partial=Ninguno, order=1, robusto=False, dropna=True, label=Ninguno, color= Ninguno, scatter_kws=Ninguno, line_kws=Ninguno, ax=Ninguno)

Parámetros:

  • x : nombre de columna de la variable independiente (predictor) o un vector.
  • y: nombre de la columna de la variable dependiente (respuesta) o un vector.
  • datos: parámetro opcional. marco de datos
  • lowess: por defecto es falso.

A continuación se muestra un ejemplo de una gráfica de residuos simple donde x (variable independiente) es head_size del conjunto de datos e y (variable dependiente) es la columna brain_weight del conjunto de datos.

Python3

# import packages and libraries
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
  
# reading the csv file
data = pd.read_csv('headbrain3.csv')
  
sns.residplot(x='Head_size', y='Brain_weight', data=data)
  
plt.show()

Producción:  

Podemos ver que los puntos se trazan en una distribución aleatoria, no hay un patrón y los puntos no se basan en un lado, por lo que no hay problema de heteroscedasticidad.  

Publicación traducida automáticamente

Artículo escrito por isitapol2002 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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