0% encontró este documento útil (0 votos)
181 vistas13 páginas

Regresión Lineal Simple

Cargado por

iscmendoza1002
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
181 vistas13 páginas

Regresión Lineal Simple

Cargado por

iscmendoza1002
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Regresión lineal con Python

Joaquín Amat Rodrigo


Octupre, 2020

Más sobre ciencia de datos: [Link]


« Regression lineal con python
» Correlación lineal con Python
« Regresión logística con python
« Machine leaming con Python y Scikit-learn

Introducción

La regresión lineal es un método estadístico que trata de modelar la relación entre una variable continua y una o más variables
independientes mediante el ajuste de una ecuación lineal. Se llama regresión lineal simple cuando solo hay una variable
independiente y regresión lineal múltiple cuando hay més de una. Dependiendo del contexto, a la variable modelada se le
conoce como variable dependiente o variable respuesta, y a las variables independientes como regresores, predictores o
features
Alo largo de este documento, se describen de forma progresiva los fundamentos teóricos de la regresión lineal, los principales
espectos prácticos a tener en cuenta y ejemplos de cómo crear este tipo de modelos en Python.

Modelos de regresión lineal en Python


Dos de las implementaciones de madelos de regresión lneal más utiizadas en Python son: scikit-earn y statsmodels. Aunque
ambas están muy optimizadas, Scikit-learn está orientada principalmente a la predicción, por lo que no dispone de apenas
funcionalidades que muestren las muchas características del modelo que se deben analizar para hacer inferencia. Statsmodels
es mucho más completo en este sentido.
Definición matemática

El modelo de regresión lineal (Legendre, Gauss, Galton y Pearson) considera que, dado un conjunto de observaciones
{92 %1, -, Ta) 4, la media (1 de la variable respuesta y se relaciona de forma Ineal con la o las variables regresoras r1
, acorde a la ecuación:
By =By + B171 + Baro+... 1897
El resultado de esta ecuación se conoce como la línea de regresión poblacional, y recoge la relación entre los predictores y la
media de la variable respuesta
Otra definición que se encuentra con frecuencia en los libros de estadística es:
Yi — Bo + BiTa + Poria+.. BTy + €
En este caso, se está haciendo referencia al valor de y para una observación i concreta. El valor de una observación puntual
nunca va a ser exactamente igual al promedio, de ahí que se añada el término de error e
En ambos casos, la interpretación de los elementos del modelo es la misma
+ fo es la ordenada en el origen, se corresponde con el valor promedio de la variable respuesta y cuando todos los
predictores son cero.
+ Bj es el efecto promedio que tiene sobre la variable respuesta el incremento en una unidad de la variable predictora z;
menteniéndose constantes el resto de variables. Se conocen como coeficientes parciales de regresión
+ € es el residuo o error, la diferencia entre el valor observado y el estimado por el modelo. Recoge el efecto de todas
aquelles veriables que influyen en y pero que na se incluyen en el modelo como predictores
En la gran mayoría de casos, los valores Áo y f; poblacionales se desconocen, por lo que, e partir de una muestra, se obtienen
sus estimaciones Ao y Á . Ajustar el modelo consiste en estimar, a partir de los datos disponibles, los valores de los coeficientes
de regresión que maximizan la verosimilitud (likelihood), es decir, los que dan lugar al modelo que con mayor probabilidad puede
haber generado los datos observados.

El método empleado con más frecuencia es el ajuste por mínimos cuadrados ordinarios (OLS), que identífica como mejor
modelo la recta (o plano si es regresión múltiple) que minimiza la suma de las desviaciones verticales entre cada dato de
entrenamiento y la recta, elevadas al cuadrado
Modelo de regresión lineel y cus errores: la lines gríe representa la reota de regresión (el medelo) y loe eegmentos rejos el error entre esta y cada obcervación.

Computacionalmente, estos cálculos son más eficiontos si se realizan de forma matricial:


y=X"B+e

U 1 2a -- 24 e
V| y _ |! a - e
Ea E Zup &

h= ;nul(y — X

Una vez estimados los coeficientes, se pueden obtener las estimaciones de cada observación (4;):
Ui =By +Áura + Byrit... + BTy
Finalmente, la estimacion de la varianza del modelo (&2) se obtiene como:

PC CEA
n—D n—D
donde n es el número de observaciones y p el número de predictores.
Interpretación del modelo

Los principales elementos que hay que interpretar en un modelo de regresión lineal son los coeficientes de los predictores:
« B es la ordenada en el origen o infercept, se corresponde con el valor esperado de la variable respuesta y cuando todos los
predictores son cero.
« B;los coeficientes de regresión parcial de cada predictor indican el cambio promedio esperado de la variable respuesta y al
incrementar en una unidad de la variable predictora @;, manteniéndose constantes el resto de veriables.
La magnitud de cada coeficiente parcial de regresión depende de las unidades en las que se mida la varieble predictora a la que
corresponde, por lo que su magnitud no está asociada con la importancia de cada predictor
Para poder determinar qué impacto tienen en el modelo cada una de las variables, se emplean los coeficientes parcieles
estandarizados, que se obtienen al estandarizar (sustraer la media y dividir entre la desviación estándar) las variables
predictoras previo ajusto del modelo. En esto caso, 8y se correspondo con el valor esperado de la variablo respuesta cuando
todos los predictores se encuentran en su valor promedio, y B; el cambio promedio esperado de la variable respuesta al
incrementar en una desviación estándar la variable predictora 2;, manteniéndose constantes el resto de variables
Si bien los coeficientes de regresión suelen ser el primer objetivo de la interpretación de un modelo lineal, existen muchos otros
aspectos (significancia del modelo en su conjunto, significancia de los predictores, condición de normalidad..). Estos últimos
suelen ser tratados con poca detalle cuando el único objetivo del modelo es realizar predicciones, sin embargo, son muy
relevantes si se quiere realizar inferencia, es decir, explicar las relaciones entre los predictores y la variable respuesta. A lo largo
de este documento se irán introduciendo cada uno de ellos.

ignificado “lineal
El término "lineal” en los modelos de regresión hace referencia al hecho de que los parámetros se incorporan en la ecuación de
forma lineal, no a que necesariamente la relación entre cada predictory la variable respuesta tenga que seguir un patrón lineal.
La siguiente ecuación muestra un modelo lineal en el que el predictor21 no es lineal respecto a y:
Y=80+ 121 + Palog(a1) +e

En contraposición, el siguiente no es un modelo lineal


y=Fo+Bialt+e
En ocasiones, algunas relaciones no lineales pueden transtormarse de forma que se pueden expresar de manera Ineal
y=Ac
log(y) — log(80) + Brlog(z1) + log(<)
Bondad de ajuste del modelo

Una vez ajustado el modelo, es necesario veríficar su utlidad ya que, aun siendo la linea que mejor se ajusta a las
observaciones de entre fodas las posibles, puede tener un gran error. Las métrices más ulilizadas para medir la calidad del
ajuste son: el error estándar de los residuos y el coeficiente de determinación R?

Error estándar de los residuos (Residual Standar Error, RSE)

Mide le desviación promedio de cualquier punto estimado por el modelo respecto de la recta de regresión. Tiene las mismas
unidades que la variable respuesta. Una forma de saber si el valor del RSE es elevado consiste en dividirlo entre el valor medio
de la variable respuesta, obteniendo así un % de la desviación.

Coeficiente de determinación R?
R? describe la proporción de varianza de la variable respuesta explicada por el modelo y relativa a la varianza total. Su valor
está acotado entre 0 y 1. Al ser adimensional, presenta la ventaja frente al RSE de ser más fácil de interpretar.
B Suma de cuadrados totales - Suma de cuadrados residuales _
Suma de cuadrados totales _
Suma de cuadrados residuales
— Sumade cuadradostotales —
Dú —
Xl —7)?

En los modelos de regresión líneal simple el valor de R? se corresponde con el cuadrado del coeficiente de correlación de
Pearson (1) entre T e y, no siendo así en regresión múltiple.
En los modelos lineales múltiples, cuantos más predictores se incluyan en el modelo, mayor es el velor de R?. Esto es así ya
que, por poco que sea, cada predictor va a explicar una parte de la variabilidad observada en y. Es por esto que R? no puedo
utiizarse para comparar modelos con distinto número de predictores.
R4, INtroduce una penalización al valor de R? por cada predictor que se añade al modelo. El valor de la penalización
depende del número de predictores utilizados y del tamaño de la muestra, es decir, del número de grados de libertad. Cuanto
mayor es el tamaño de la muestra, más predictores se pueden incorporar en el modelo. R2, = . permite encontrar el mejor
modelo, aquel que consigue explicar mejor la variabilidad de y con el menor número de predictores.

- S, 1 — (2 1 -- SSE/i
SST n p n SST/df,

siendo SSE la variabiidad explicada por el modelo (Sum of Squares Explained), SST la variabilidad total de y (Sum of
Squeres Tofal), n el tamaño de la muestra y p el número de predictores introducidos en el modelo.
Significancia del modelo F-test

Uno de los primeros resultados que hay que evaluar al ajustar un modelo es el resultado del test de significancia F. Este
contraste responde a la pregunta de si el modelo en su conjunto es capaz de predecir la variable respuesta mejorde lo esperado
por azar, o lo que es equivalente, si al menos uno de los predictores que forman el modelo contribuye de forma significativa.
Para realizar este contraste se compara la suma de residuos cuadrados del modelo de interés con la del modelo sin predictores,
formado únicamente por la media (también conocido como suma de cuadrados corregidos por la media, T).
(TSS — RSS)/(p — 1)
F="Ts5/m-»
Con frocuencia, la hipótosis nula y alternativa de este test so describen como
- HoB1=..=B,1=0
. H, almenos un f; # 0
Si el test F resulta significetivo, implica que el modelo es úlil, pero no que sea el mejor. Podría ocurrir que alguno de sus
predictores no fuese necesario

Significancia de los predictores

En la mayoría de casos, aunque el estudio de regresión se aplica a una muestra, el objetivo último es abtener un modelo lineal
que explique la relación entre las variebles en toda la población. Esto significa que, el modelo generado, es una estimación de la
relación poblacional a partir de la relación que se observa en la muestra y, por lo tanto, está sujeta a variaciones. Para cada uno
de los coeficientes de la ecuación de regresión lineal (8;) se puede calcular su significancia (p-valus) y su intervelo de
confianza. El test estadistico más empleado es el t-test (existen altemativas no paramétricas).

El test de significancia para los coeficientes (9;) del modelo lineal considera como hipótesis:
» Ho: el predictor z; no contribuye al modelo (8; = 0), en presencia del resto de predictores. En el caso de regresion lineal
simple, se puede interpretar también como que no existe relación lineal entre ambas variables por lo que la pendiente del
modelo es cero 8; = 0
» H,: el predictor z; sí contribuye al modelo (8; £ 0), en presencia del resto de predictores. En el caso de regresión lineal
simple, se puede interpretar también como que sí existe relación lineal entre ambas variables por lo que le pendiente del
modelo es distinta de cero 9; # 0

Calculo del estadístico T y del p-value:

donde
La varianza del error 0? so estima a partir del Residual Standar Error (RSE), que puede entenderse como la diferencia promedio
que se desvía la variable respuesta de la verdadera línea de regresión. En el caso de regresión lineal simple, RSE equivale a:
RSE = /szzss:
1
nfz_í,:(”'*
1 a

« Grados de libertad (df) = número observaciones - 2 = número observaciones -número predictores - 1


« p-Value = P(lt| > valor calculado de t)

Intervalos de confianza

B7 + 10 SP(Ó,)

Cuanto menor es el número de observaciones n, menor la capacidad para calcular el error estandar del modelo. Como
consecuencia, la exactitud de los coeficientes de regresión estimados se reduce. Esto tiene importancia sobretodo en la
regresión mútiple.
En los modelos generados con [statsmodels | se devuelve, junto con el valor de los coeficientes de regresión, el valor del
estadístico ¢ obtenido para cada uno, los p-value y los intervalos de confianza correspondientes. Esto permite saber, además de
las estimaciones, si son significativamente distintos de 0, es decir, si contribuyen al modelo
Para que los cálculos descritos anteriormente sean válidos, se tiene que asumir que los residuos son independientes y que se
distribuyen de forma normal con media 0 y varianza . Cuando la condición de normalidad no se satisface, existe la posibilidad
de recurrir a los test de permutación para calcular significancia (p-value) y al bootstrapping para calcular intervalos de confianza.

Valores atípicos (outliers)

Independientemente de que el modelo se haya podido aceptar, siempre es conveniente identificar si hay algún posible outlier,
observación con alto leverage o influyente, puesto que podria estar condicionando en gran medida el modelo. La eliminación de
este tipo de observaciones debe de analizarse con detalle y dependiendo de la finalidad del modelo. Si el fin es predictivo, un
modelo sin outiiers ni observaciones altamente influyentes suele ser capaz de predecir mejor la mayoría de casos. Sin embargo,
es muy importante prestar atención a estos valores ya que, de no tratarse de errores de medida, pueden ser los casos más
interesantes. El modo adecuado de proceder cuando se sospecna de algún posible valor atípico o influyente es calcular el
modelo de regresión incluyendo y excluyendo dicho valor
Ejemplo regresión lineal simple

Supóngase que un analista de deportes quiere saber si existe una relación entre el número de veces que batean los jugadores
de un equipo de béisbol y el número de runs que consigue. En caso de existir y de establecer un modelo, podría predecir el
resultado del partido

Librerías

Las librerías utilizadas en este ejemplo son

In [60]: | # Tratamiento de datos


+
import pandas as pd
import numpy as np
# Gráficos
#
import [Link] as plt
from matplotlib import style
import seaborn as sns
# Preprocesado y modelado
#
from [Link] import pearsonr
from sklearn.linear_model import Linearsegression
from sklearn.model_selection import train_test_split
from [Link] import r2_score
from [Link] import mean_squared_error
import [Link] as sm
import [Link] as smf
# Configuración matplotLib
# — —
[Link][*[Link]"]
#pLt. reParams[" [Link]’]

# Configuración warnings
# - =
import warnings
warnings. filteruarnings("ignore’)
Datos
In [61]: * Datos
e
equipos = ["Texas”,"Boston
“Miluaukee", "Colorado" ‘Los_An.", "Chicago”,
Cincinnati”,"Los_P.","Philadelphia”, “Chicago' Cleveland”, "Arizona",
“Toronto","Minnesota", "Florida", "Pittsburgh", "Oakland", "Tampa",
“Atlanta”, "Washington”,"San.F","San.I", "Seattle"]
bateos = [5659, 5710, 5563, 5672, 5532, 5660, 5518, 5447, 5544, 5598,
5585, 5436, 5549, 5612, 5513, 5579, 5502, 5509, 5421, 5559,
5487, 5508, 5421, 5452, 5436, 5528, 5441, 5486, 5417, 5421]
runs = [855, 875, 787, 736, 762, 718, 867, 721, 735, 615, 768, 644, 654, 735,
667, 713, 654, 704, 731, 743, 619, 625, 610, 645, 767, 641, 624, 570,
593, 556]
datos = [Link](('equipos equipos, "bateos': bateos, 'runs': runs))
[Link](3)
out[61]:
equipos bateos runs
0 Texas 5650 855
1 Boston 5710 875
2 Detrot 5563 787

Representacion grafica

El primer paso antes de generar un modelo de regresión simple es representar los datos para poder intuirsi existe una relación y
cuantificar dicha relación mediante un coeficiente de correlacion.

Tn [62]: 4 Gráfico
Ea
Fig, ax - [Link](figsize-(6, 3.84))
[Link](

)
ax.ser_title("Distribución de bateos y runs'):
Distribución de bateos y runs
050 .
00
70 =

s .. —
m
550
sa 00 SD 00 S6O 5700
teos

Tn [63]: 4 Correlación Lineal entre Las dos variobles


7
corr_test - pearsonr(x - datos['bateos'], y iatos[*runs'])
print("Coeficiente de correlación de Pearson: corr_test[8])
print("P velue: ", come_test[1])
Coeficiente de conrelación de Pearson: 0.6106270467206687
P-value: - €.0003388351359791978
Ajuste del modelo

So ejusta un modelo emploando como variable respuesta como predictor Como en todo estudio predictivo, na
solo es importante ajustar el modelo, sino también cuantíficar su capacidad para predecir nuevas observaciones. Para poder
hacer esta evaluación, se dividen los datos en dos grupos, uno de entrenamiento y otro de test.

In [64]: | # División de Los datos en train y test


#
X = datos[['bateos']]
y = datos['runs']
X_train, X test, y_train, y_test = train_test_split(
[Link](-1,1),
y .[Link](-1,1),
train size = 0.8,
random_state - 1234,
shuffle - True

modelo = LinearRegression()
[Link](X = X [Link](-1, 1), y = y_train)
Out[64]: LinearRegression()

In [65]: + Información del modelo


*
print("Intercept: odelo. intercept_)
print("Coeficiente:", list(zip([Link], modelo.coef_.flatten(), )))
print("Coeficiente de determinación R*2:", [Link](X, y))
Intercept: [-2367.7028413]
Coeficiente: [('bateos', 8.5528713534479736) ]
Coeficiente de determinación R"2: 6.3586119899498744

Una vez entrenado el modelo, se evalúa la capacidad predictiva empleando el conjunto de test.

In [66]: | # Error de test del modelo


# = —]————— — —]——_—— — —]———]—
predicciones - [Link](X - X test)
print (predicciones[0:3,])
rmse - mean_squared_error(
y_true = y test,
y_pred - predicciones,
squared = False
)
print("")
print(F"El error (rmse) de test es: {rmse}")
[[643.78742093]
[720.0836677 ]
[690.78148597]]
Statsmodels
La implementación de regresión lineal de Statsmodels, es más completa que la de Scikitleam ya que, además de ajustar el
modelo, permite calcular los test estadísticos y análisis necesarios para veríficar que se cumplen las condiciones sobre las que
se basa este tipo de modelos. Statsmodels liene dos formas de entrenar el modelo
+ Indicando la fórmula del modelo y pasando los datos de entrenamiento como un dataframe que incluye la variable respuesta
y los predictores. Esta forma es similar a la utiizada en R
+ Pasar dos matrices, una con los predictores y ofra con la variable respuesta. Esta es igual a la empleada por Scikitlearn con
la diferencia de que a la matriz de predictores hay que añadirle una primera columna de 1s.

1n [67]: # División de Los datos en train y test


.
X = datos[['bateos']]
y - datos[*runs']
X_train, X test, y train, y test - train_test_split(
[Link](-1,1),

shuFfle - True
)
In [68]: 7 Creación del modelo utilizando el modo formula (similar a R)
E2
% datos_train = [Link]([Link]((X tratn, y tratn)), columns= "bareos , rans'])
# modelo - [Link]<(formila = "runs ~bateos’, data = datos_train)
# modelo = [Link]()
# print(nodelo. sumary ())

In [69]: | # Creación del modelo utilizando matrices como en scikitlearn


#
# A La matriz de predictores se Le tiene que añadir una columna de 15 para el intercept del modelo
X train - sm.add_constant(X_train, prepend-True)
modelo = [Link](endog=y_train, exog=X train,)
modelo = [Link]()
print(modelo. sumnary ())
OLS Regression Results
Dep. Variable: y — R-squared: 0.271
OLS — Adj. R-squared: 0.238
Least Squares — F-statistic: 8.191
Fri, 30 Oct 2020 — Prob (F-statistic): 0.00006
[Link] - Log-Likelihood: -134.71
No. Observations: 24 AL 273.4
DF Residuals: 22 BIC: 275.8
DF Model: 1
Covariance Type: nonrobust
coef — std err t P t| [0.025 0.975]
const -2367.7028 - 1066.357 — -2.220 0.037 -4579.192 — -156.214
x1 0.5520 0.193 2.862 0.009 0.152 0.953
omnibus 5.033 Durbin-Watson: 1.902
Prob(Omnibus) : 0.081 — Jarque-Bera (18): 3.170
Skew: 0.829 Prob(38): 0.205
Kurtosis: 3.650 — Cond. No. 4.17e+05

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 4.17e+05. This might indicate that there are
strong multicollinearity or other numerical problems.
Intervalos de confianza de los coeficientes

In [78]: |4 mtervalos de conftanza para Los coeficientes del modelo


,
modelo.conf_int(alpha=0.e5)
OUECTO]: array([[-9.570197052+03, -1.562136338:82],
[ 1.522411900-01, 0.534085270-01)])

Predicciones

Una vez entrenado el modelo, se pueden obtener predicciones para nuevos datos. Los modelos de statsmodels permiten
calcular las predicciones de dos formas:
« [-predict()] devuelve únicamente el valor de las predicciones
« [-get_prediction(). sunmary_frane() - devuelve, además de las predicciones, los intervalos de confianza asociados.

tn [71]: | # Predicciones con intervalo de confianza del 9%


# = —
predicciones = modelo.get_prediction(excg = X traln).sumary_frane(aloha=[Link])
predicciones. head(4)
out(71]
mean — mean_se mean_ci lower mean_ci_upper obs_ci lower obs_ci_upper
0 762103475 32656268 - 70DASAJ7I H5912571 6094050 — G25910807
4 GADESIZTE 10237051 ORGSR — 60400224 OSSN 7955005
2 600270030 1410644 GOS0 TSV — 532741006 - 826812785
3 TESONIGS 227670500 — GB7TOADOI — TE2220008 — 5B3803300 — 2012008

Representación gráfica del modelo

Además de la Iínea de mínimos cuadrados, es recomendable incluir los Iímites superior e inferior del intervalo de confianza. Esto
permite identificar la región en la que, según el modelo generado y para un determinado nivel de confianza, se encuentra el valor
promedio de la variable respuesta

In [72]: 4 Predicciones con intervalo de confianza del 95%


#
predicciones = modelo.get_prediction(exog = X train).sumary_frame(alpha=0.65)
predicciones['x'] = X train[:, 1]
predicciones['y'] = y train
predicciones = precicciones.sort_values(”x”)
# Gráfico del modelo
Ea = —
Fig, ax - [Link](figsize-(6, 2.84))
[Link](predicciones['x'], predicciones['y'], marker-"0", color —
[Link](predicciones['x"], precicciones["mean”], linestyle-"-', label-"0LS")
[Link](predicciones['x'], precicciones["mean_ci_lower"], linestyle="
[Link](predicciones['x'], precicciones["mean_ci_upper"], linestyle-"
[Link] betueen(predicciones[*x'], predicciones['mean_ci loner"], predicciones["nean_ci upper"], alph
[Link]();

70

5550
Error de test

n [73): # Error de test del modelo


s
X_test - em.add_constant(X_test, prepend-True)
precicciones - [Link](exog - X_test)
Pnse - mean_squared_error(
y true = y test
y pred = predicciones,
sauared = False
printi
print(£"El enror (mmse) de test es: {rmse}")
El error (rmse) de test es: 59.33671668336218

Interpretación

La columna ([coer)) devuelve el valor estimado para los dos parámetros de la ecuación del modelo lineal (B0 y A1) que
equivelen a la ordenada en el origen (infercept o consi) y e la pendiente. Se muestren también los errores estándar, el valor del
estadístico £ y el p-value (dos colas) de cada uno de los dos parámetros. Esto permite determinar si los predictores son
significativamente distintos de 0, es decir, que tienen importancia en el modelo. Para el modelo generado, tanto la ordenada en
el origen como la pendiente son significativas (p-values < 0.05)
El valor de [R-=quared] indica que ol modelo os capaz do explicarel 27.1% do la variabilidad obsorvada en la variable respuesta
(runs). Adomás, el p-valuo obtenido on el test F (Prob (F-statistic) - 6.00986)) indica que sí hay ovidencias de que la
varianza oxplicada por el modelo es superior a la esporada por azar (varianza total).
El modelo lineal generado sigue la ecuacion
Tuns — -2367.7028 + 0.6305 bateos
Por cada unidad que se incrementa el número de bateos, el número de runs aumenta en promedio 0 6305 unidades
El error de test del modelo es de 59 34 Las predicciones del modelo final se alejan en promedio 59 34 unidades del valor real

También podría gustarte