[go: up one dir, main page]

0% encontró este documento útil (0 votos)
203 vistas21 páginas

Regresion Lineal Simple Con Python

Este documento describe la regresión lineal simple y su implementación en Python. Explica los conceptos fundamentales de la regresión lineal simple como la variable dependiente, variable independiente, coeficientes de regresión, y significado de "lineal". Luego, muestra código Python para crear un modelo de regresión lineal simple usando las librerías Scikit-learn y Statsmodels.

Cargado por

Brian Lopez
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
203 vistas21 páginas

Regresion Lineal Simple Con Python

Este documento describe la regresión lineal simple y su implementación en Python. Explica los conceptos fundamentales de la regresión lineal simple como la variable dependiente, variable independiente, coeficientes de regresión, y significado de "lineal". Luego, muestra código Python para crear un modelo de regresión lineal simple usando las librerías Scikit-learn y Statsmodels.

Cargado por

Brian Lopez
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 DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 21

REGRESION LINEAL SIMPLE CON

PYTHON

BRIAN LOPEZ GONZALEZ


17 DE MAYO DE 2023
Contenido

Introducción.............................................................................................................1
Conceptos fundamentales......................................................................................2
Regresión lineal simple...............................................................................................................2
Significado "lineal".......................................................................................................................4
Regresión lineal en Python.....................................................................................5
Referencias..................................................................¡Error! Marcador no definido.
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.

A lo largo de este documento, se describen de forma progresiva los fundamentos

teóricos de la regresión lineal, los principales aspectos prácticos a tener en cuenta

y ejemplos de cómo crear este tipo de modelos en Python

1|Página
Conceptos fundamentales

Primero que nada, demos un repaso por los conceptos fundamentales para

el entendimiento del programa y su funcionamiento, principalmente los

fundamentos matemáticos del análisis mediante Regresión Lineal Simple.

Regresión lineal simple

El objetivo de un modelo de regresión es tratar de explicar la relación que

existe entre una variable dependiente (variable respuesta) Y un conjunto de

variables independientes (variables explicativas) X 1 , ... , X n.

En un modelo de regresión lineal simple tratamos de explicar la relación que existe

entre la variable respuesta Y y una única variable explicativa X.

Mediante las técnicas de regresión de una variable Y sobre una variable X,

buscamos una función que sea una buena aproximación de una nube de puntos (

x i , y i ), mediante una curva del tipo:

2|Página
Los principales elementos que hay que interpretar en un modelo de regresión

lineal son los coeficientes de los predictores:

 β 0 es la ordenada en el origen o intercept, se corresponde con el valor

esperado de la variable respuesta  y  cuando todos los predictores son cero.

 β j  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  x j , manteniéndose constantes el resto de variables.

La magnitud de cada coeficiente parcial de regresión depende de las unidades en

las que se mida la variable 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 parciales estandarizados, que se obtienen al

estandarizar (sustraer la media y dividir entre la desviación estándar) las variables

predictoras previo ajuste del modelo. En este caso,  β 0  se corresponde con el valor

esperado de la variable respuesta cuando todos los predictores se encuentran en

su valor promedio, y  β j  el cambio promedio esperado de la variable respuesta al

incrementar en una desviación estándar la variable predictora  x j , 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

3|Página
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.

Significado "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 predictor y la variable respuesta tenga que

seguir un patrón lineal.

La siguiente ecuación muestra un modelo lineal en el que el predictor  x 1 no es

lineal respecto a  y :

y=β 0 + β 1 x 1 + β 2 log ( x 1 ) +∈

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

b2
y=β 0 + β 1 x 1 + ϵ

4|Página
En ocasiones, algunas relaciones no lineales pueden transformarse de forma que

se pueden expresar de manera lineal:

β1
y=β 0 x 1 ϵ

log ( y )=log ( β 0) + β1 log ( x 1 ) +log ( ϵ )

Regresión lineal en Python

Dos de las implementaciones de modelos de regresión lineal más utilizadas

en Python son: scikit-learn 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.

A continuación, presentamos el código:

from math import sqrt as sqrt

import matplotlib.pyplot as plt

class RLS:

def __init__(self,x_ingreso,y_ingreso):

self.x = x_ingreso

self.y = y_ingreso

self.n = len(x_ingreso)

5|Página
if (len(x_ingreso)==len(y_ingreso)):

print("Numero de datos coincidentes...")

print("Variables definidas...")

else:

print("Datos incoincidentes.")

self.x_media = sum(x_ingreso)/self.n

self.y_media = sum(y_ingreso)/self.n

self.sumatoria_xy = RLS.sumatoria(x_ingreso, y_ingreso)

self.sumatoria_x_cuadrada = RLS.sumatoria_cuadrada(x_ingreso)

self.vector_y = []

self.b_0 = 0

self.b_1 = 0

self.SSE = 0

self.SST = 0

self.SSR = 0

self.coef_det = 0

self.var = 0

self.desv_est = 0

6|Página
self.coef_corr_muest = 0.0

self.MSE = 0.0

self.Eror_estandar_estimado = 0.0

def resolver(self):

self.b_1 = RLS.fb_1(self)

self.b_0 = RLS.fb_0(self)

for i in range(0,len(self.x)):

self.vector_y.append(RLS.funcion(self, self.x[i]))

self.SSE = RLS.fSSE(self)

self.SST = RLS.fSST(self)

self.SSR = RLS.fSSR(self)

self.coef_det = RLS.fcoef_det(self)

self.var = RLS.varianza(self)

self.desv_est = RLS.desviacion_estandar(self)

self.coef_corr_muest = RLS.coef_corr_muest(self)

self.MSE = RLS.fMSE(self)

self.Error_estandar_estimado = RLS.fError_estandar_estimado(self)

7|Página
def sumatoria(sum1,sum2):

suma = 0.0

for i in range(0,len(sum1)):

suma += sum1[i]*sum2[i]

return suma

def sumatoria_cuadrada(sum_cuad):

suma = 0

for i in range(0, len(sum_cuad)):

suma += sum_cuad[i]**2

return suma

def fb_1(self):

res = (self.sumatoria_xy

-((sum(self.x)*sum(self.y))/self.n))/(self.sumatoria_x_cuadrada-

(sum(self.x)**2/self.n))

return res

def fb_0(self):

res = self.y_media - (self.b_1*self.x_media)

return res

8|Página
def funcion(self, x_i):

y_estimada = 0

y_estimada = self.b_0 + self.b_1*x_i

return y_estimada

def estimar_y(self):

pass

"""def estimacion():

for i in range(0,len(RLS.x)):

RLS.vector_y.append(RLS.funcion(RLS.x[i]))"""

def fSSE(self):

res = 0

for i in range(0,len(self.x)):

res += (self.y[i]-self.vector_y[i])**2

return res

def fSST(self):

res = 0

for i in range(0,self.n):

res += (self.y[i] - self.y_media)**2

9|Página
return res

def fSSR(self):

res = 0

for i in range(0,len(self.x)):

res += (self.vector_y[i]- self.y_media)**2

return res

def fcoef_det(self):

res = 0

res = self.SSR/self.SST

return res

def coef_corr_muest(self):

res = 0.0

res = sqrt(self.coef_det)

if self.b_1 > 0:

return res

else:

return res*-1

def varianza(self):

10 | P á g i n a
res = 0

aux = 0

for i in range(0,len(self.x)):

aux += (self.x[i] - self.x_media)**2

res = aux/(self.n-1)

return res

def desviacion_estandar(self):

res = 0

res = sqrt(self.var)

return res

def fMSE(self):

res = self.SSE/(self.n - 2)

return res

def fError_estandar_estimado(self):

res = sqrt(self.MSE)

return res

def valor_z(self):

11 | P á g i n a
pass

def impresion(self):

print("Ecuacion de Regresion: y = ",self.b_0," + ",self.b_1,"x")

print("N: ",self.n)

print("Media de x: ",self.x_media)

print("Media de y: ",self.y_media)

print("Sumatoria xy: ",self.sumatoria_xy)

print("Sumatoria x^2: ",self.sumatoria_x_cuadrada)

print("Suma de x: ",sum(self.x))

print("Suma de y: ",sum(self.y))

print("b_1: ",self.b_1)

print("b_0: ",self.b_0)

print("SSE: ",self.SSE)

print("SST: ",self.SST)

print("SSR: ",self.SSR)

print("Coeficiente de determinacion r^2: ",self.coef_det)

12 | P á g i n a
print("Varianza: ",self.var)

print("Desviacion estandar: ",self.desv_est)

print("Coeficiente de correlacion de la muestra: ",self.coef_corr_muest)

print("Error cuadrado medio: ", self.MSE)

print("Error estandar del estimado: ",self.Error_estandar_estimado)

def proyeccion(self):

ax = plt.axes()

plt.plot(self.x,self.vector_y, "-",color="red")

plt.scatter(self.x,self.y)

def modeloCompleto(self):

#RLS.definir()

RLS.resolver(self)

RLS.impresion(self)

RLS.proyeccion(self)

Como Podemos observer todo el programa se encuentra contenido en la clase

llamada RLS, esta recibe 2 listas de datos llamadas “x_ingreso” y “y_ingreso”, las

cuales corresponden a los datos a analizar.

13 | P á g i n a
Una vez ingresados los datos el método “__init__” se encarga de definir las

variables necesarias básicas para realizar el análisis, lo anterior realizando los

cálculos correspondientes según las fórmulas anteriormente presentadas.

En este punto ya tenemos un análisis inicial básico de los principales indicadores

del modelo y podríamos realizar inferencias bastante básicas.

A continuación, se observa un método llamado “resolver”, el cual se encarga de

realizar el siguiente nivel de cálculos utilizando las variables antes definidas, este

método nos devuelve los valores de la desviación estándar, coeficiente de

determinación, coeficientes de correlación y demás indicadores mas profundos a

cerca del modelo, con los cuales en principio ya se puede realizar un análisis más

completo del modelo.

Para poder realizar una interpretación más certera del resultado y así realizar un

análisis mas certero encontramos un método llamado “proyección”, el cual se

encarga de graficar los puntos muestrales y proyectar sobre la grafica la linea de

mejor ajuste calculada.

Adicional a esto encontramos el método impresión, el cual genera una salida en

pantalla con la grafica anterior y todos los parámetros del modelo ya resueltos de

manera numérica, una especie de resumen que nos ayuda a tener toda la

información de manera resumida y a la mano.

Veamos el programa en ejecución, para esto se ingresarán un conjunto de datos

pequeño con una relación y=2 x :

14 | P á g i n a
z = [1,2,3,4,5,6,7,8,9,10]

w = [2,4,6,8,10,12,14,16,18,20]

r1 = RLS(z,w)

Después hacemos uso del método “modelocompleto” el cual implementa los

métodos anteriormente mencionados y nos muestra el modelo completo, el cual

nos devuelve lo siguiente:

15 | P á g i n a
16 | P á g i n a
Como podemos observar el modelo se ajusta perfectamente a la relación

presentada ( y=2 x ), a demás nos devuelve la ecuación estimada, y los demás

parámetros, con lo cual podemos concluir que funciona de manera correcta, visto

con un ejemplo simple.

Viendo que los resultados son los esperables en el modelo que se presentó.

17 | P á g i n a
Conclusiones

En conclusión, este programa puede ser de ayuda a la hora de realizar

análisis empleando el método de regresión lineal, el cual es ampliamente utilizado

en el mundo del análisis de datos e inteligencia artificial, por mencionar algunas.

A demás podemos apreciar que el programa es intuitivo y fácil de utilizar y

entender, permitiendo que puedan realizarse adaptaciones y/o actualizaciones

para ajustarlo a las necesidades de la tarea que quiera realizarse.

18 | P á g i n a
CAMPUS TLÁHUAC 2

También podría gustarte