Cómo realizar una regresión de cuantiles en Python

En este artículo, vamos a ver cómo realizar una regresión de cuantiles en Python.

La regresión lineal se define como el método estadístico que construye una relación entre una variable dependiente y una variable independiente según el conjunto dado de variables. Mientras realizamos la regresión lineal, tenemos curiosidad por calcular el valor medio de la variable de respuesta. En su lugar, podemos usar un mecanismo conocido como regresión cuantil para calcular o estimar el valor cuantil (percentil) del valor de respuesta. Por ejemplo, percentil 30 , percentil 50 , etc. 

Regresión cuantil

La regresión cuantil es simplemente una versión extendida de la regresión lineal. La regresión cuantil construye una relación entre un grupo de variables (también conocidas como variables independientes) y cuantiles (también conocidos como percentiles) variables dependientes. 

Realizar regresión de cuantiles en Python

El cálculo de la regresión por cuantiles es un proceso paso a paso. Todos los pasos se discuten en detalle a continuación:

Creación de un conjunto de datos para demostración

Vamos a crear un conjunto de datos ahora. Como ejemplo, estamos creando un conjunto de datos que contiene la información de la distancia total recorrida y la emisión total generada por 20 automóviles de diferentes marcas.  

Python3

# Python program to create a dataset
 
# Importing libraries
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
 
np.random.seed(0)
 
# Specifying the number of rows
rows = 20
 
# Constructing Distance column
Distance = np.random.uniform(1, 10, rows)
 
# Constructing Emission column
Emission = 20 + np.random.normal(loc=0, scale=.25*Distance, size=20)
 
# Creating a dataframe
df = pd.DataFrame({'Distance': Distance, 'Emission': Emission})
 
df.head()

Producción:

    Distance    Emission
0    5.939322    22.218454
1    7.436704    19.618575
2    6.424870    20.502855
3    5.903949    18.739366
4    4.812893    16.928183

Estimación de la regresión cuantil

Ahora construiremos un modelo de regresión por cuantiles con la ayuda de,

  • Distancia recorrida: Como variable predictora
  • Kilometraje conseguido: Como variable de respuesta

Ahora, haremos uso de este modelo para estimar el percentil 70 de emisión generada en base a la distancia total recorrida por los automóviles.

Python3

# Python program to illustrate
# how to estimate quantile regression
 
# Importing libraries
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
 
np.random.seed(0)
 
# Number of rows
rows = 20
 
# Constructing Distance column
Distance = np.random.uniform(1, 10, rows)
 
# Constructing Emission column
Emission = 40 + Distance + np.random.normal(loc=0,
                                            scale=.25*Distance,
                                            size=20)
 
# Creating the data set
df = pd.DataFrame({'Distance': Distance,
                   'Emission': Emission})
 
# fit the model
model = smf.quantreg('Emission ~ Distance',
                     df).fit(q=0.7)
 
# view model summary
print(model.summary())

A partir de la salida de este programa, la ecuación de regresión estimada se puede deducir como,

 val = 39,5647 + 1,3042 * X (distancia en km) 

 Implica que se espera que el percentil 70 de emisión para todos los autos que recorren X km sea val.

Producción:

Regresión de cuantiles de visualización

Para visualizar y comprender la regresión por cuantiles, podemos usar un diagrama de dispersión junto con la regresión por cuantiles ajustada. 

Python3

# Python program to visualize quantile regression
 
# Importing libraries
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
 
np.random.seed(0)
 
# Number of rows
rows = 20
 
# Constructing Distance column
Distance = np.random.uniform(1, 10, rows)
 
# Constructing Emission column
Emission = 40 + Distance + np.random.normal(loc=0,
                                            scale=.25*Distance,
                                            size=20)
 
# Creating a dataset
df = pd.DataFrame({'Distance': Distance,
                   'Emission': Emission})
 
# #fit the model
model = smf.quantreg('Emission ~ Distance',
                     df).fit(q=0.7)
 
# define figure and axis
fig, ax = plt.subplots(figsize=(10, 8))
 
# get y values
y_line = lambda a, b: a + Distance
y = y_line(model.params['Intercept'],
           model.params['Distance'])
 
# Plotting data points with the help
# pf quantile regression equation
ax.plot(Distance, y, color='black')
ax.scatter(Distance, Emission, alpha=.3)
ax.set_xlabel('Distance Traveled', fontsize=20)
ax.set_ylabel('Emission Generated', fontsize=20)
 
# Save the plot
fig.savefig('quantile_regression.png')

Producción:

Publicación traducida automáticamente

Artículo escrito por bhuwanesh 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 *