La regresión lineal es un método que hace ajuste a un hiperplano afín respectivo. En el caso 2D se tiene una linea recta y es el que se va a presentar en este articulo.
$${\large \begin{equation*} Y = \beta_{0} + \beta_{1}X_{1} + \beta_{2}X_{2} + \cdots +\beta_{n}X_{n} \end{equation*}}$$
Donde $\beta_{0}, \beta_{1}, \beta_{2}, \cdots ,\beta_{n}$ son los parámetros de la regresión lineal para un hiperplano afín
Ahora trataremos la regresión lineal por medio de dos casos correspondientes por medio de la siguiente data que se muestra a continuación:
N de Datos | Datos $X$ | Datos $Y$ | Datos $X^2$ | Datos $X \cdot Y$ |
Dato 1 | 0 | 4.75 | 0 | 0 |
Dato 2 | 1 | 4.6 | 1 | 4.6 |
Dato 3 | 2 | 4.4 | 4 | 8.8 |
Dato 4 | 3 | 4 | 9 | 12 |
Dato 5 | 4 | 3.85 | 16 | 15.4 |
Dato 6 | 6 | 3.5 | 36 | 21 |
Dato 7 | 7 | 3.1 | 49 | 21.7 |
Dato 8 | 9 | 3 | 81 | 27 |
Dato 9 | 15 | 2.5 | 225 | 37.5 |
Dato 10 | 22 | 2 | 484 | 44 |
$\sum$ | 69 | 35.7 | 905 | 192 |
También se puede definir un coeficiente llamado coeficiente de correlación lineal el cual tiene la finalidad de medir el grado de relación de las dos variables correspondiente. La ecuación del coeficiente de correlación lineal es igual a:
$$ {\large \begin{equation*} \rho = \frac{Cov(X, Y)}{\sqrt{Var(X)} \cdot \sqrt{Var(Y)}} \end{equation*} }$$
Donde el coeficiente de correlación lineal tiene un rango de valores $[-1, 1]$
- Si $\rho = 1$ hay correlación lineal positiva perfecta
- Si $0 < \rho < 1$ hay correlación lineal positiva
- Si $\rho = 0$ no hay correlación lineal positiva
- Si $ -1 < \rho < 0$ hay correlación lineal negativa
- Si $\rho = -1$ hay correlación lineal negativa perfecta
Regresión Lineal de un Conjunto de Puntos (X, Y) |
Regresión Lineal por Mínimos Cuadrados
El método de mínimos cuadrados es una técnica del análisis numérico que nos permite realizar una regresión lineal de un conjunto de puntos determinados. Si tratamos el método de mínimos cuadrados en un plano entonces la regresión seria una recta que tiene por ecuación y = mx + b respectivamente.
Ahora para calcular la pendiente y el intercepto de la recta se hace usa de las ecuaciones que nos brinda el método de los mínimos cuadrados las cuales son las siguientes:
$${\large \begin{align*} m &= \frac{\sum X \sum Y - N\sum (X \cdot Y)}{(\sum X )^2 - N\sum X^2} \\ \\ b &= \frac{\sum X \sum (X \cdot Y) - \sum Y \sum X^2}{(\sum X )^2 - N\sum X^2} \end{align*} }$$
Donde X representan a los puntos en las abscisas y Y representan a los puntos de las ordenadas respectivamente. Por consiguiente la ecuación de la recta por el método de los mínimos cuadrados esta dada por la siguiente ecuación
$${\large \begin{equation*} y = \left( \frac{\sum X \sum Y - N\sum (X \cdot Y)}{(\sum X )^2 - N\sum X^2} \right)x + \frac{\sum X \sum (X \cdot Y) - \sum Y \sum X^2}{(\sum X )^2 - N\sum X^2} \end{equation*} }$$
Código Fuente Para La Regresión Lineal por Mínimos Cuadrados
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(12,6))
X = np.array([0, 1, 2, 3, 4, 6, 7, 9, 15, 22])
Y = np.array([4.75, 4.6, 4.4, 4, 3.85, 3.5, 3.1, 3, 2.5, 2])
N = len(X)
prom_X=np.mean(X)
prom_Y=np.mean(Y)
sum_X = np.sum(X)
pot_X = np.sum(X*X)
sum_Y = np.sum(Y)
prod_XY = np.sum(X*Y)
VarX = np.sqrt(np.sum( (X - prom_X)**2 ))
VarY = np.sqrt(np.sum( (Y - prom_Y)**2 ))
Cov_X_Y = np.sum( (X-prom_X)*(Y-prom_Y) )
m = (sum_X*sum_Y - N*prod_XY)/((sum_X)**2 - N*pot_X)
b = (sum_X*prod_XY - pot_X*sum_Y)/((sum_X)**2 - N*pot_X)
r = Cov_X_Y / (VarX * VarY)
Z = m*X + b
print("La pendiente es igual a: {}".format(m))
print("El intercepto es igual a: {}".format(b))
print("El coeficiente de correlación lineal es igual a: {}".format(r))
plt.title("Regresión Lineal por Mínimos Cuadrados", fontsize=20)
plt.xlabel("Eje X", fontsize=20)
plt.ylabel("Eje Y", fontsize=20)
plt.plot(X,Y, 'ro', markersize=10)
plt.plot(X,Z, color='k', lw=2, label="Y = {:.3f}X + {:.3f}".format(m,b))
plt.legend(loc='best', fontsize=15)
plt.show()
Regresión Lineal por Mínimos Cuadrados para la Data. |
Regresión Lineal por el Método Matricial
La regresión lineal por el método matricial es un caso particular de la regresión polinómica en el cual la matriz de Vandermonde tiene solo dos columnas correspondientes debido a que la recta de la regresión lineal pide calcular dos parámetros correspondientes los cuales son la pendiente de la recta y el intercepto de la recta respectivamente.
$${\large \begin{align*} Y &= M \cdot C \\ \begin{bmatrix} Y_{1} \\ Y_{2} \\ Y_{3} \\ \vdots \\ Y_{n} \end{bmatrix} &= \begin{bmatrix} 1 & X_{1} \\ 1 & X_{2} \\ 1 & X_{3} \\ \vdots & \vdots \\ 1 & X_{n} \end{bmatrix} \cdot \begin{bmatrix} b \\ m \end{bmatrix} \end{align*}}$$
Donde:
b es el intercepto de la recta.
m es la pendiente de la recta.
Para obtener los parámetros de la regresión lineal se hace uso del algebra lineal.
$${\large \begin{align*} Y &= M \cdot C \\ M^{t} \cdot Y &= M^{t} \cdot M \cdot C \\ C &= (M^{t} \cdot M)^{-1} \cdot M^{t} \cdot Y \end{align*} }$$
Código Fuente Para La Regresión Lineal por el Método Matricial
import numpy as np
import matplotlib.pyplot as plt
from numpy.linalg import inv
fig=plt.figure(figsize=(12,6))
X = np.array([0, 1, 2, 3, 4, 6, 7, 9, 15, 22])
Y = np.array([4.75, 4.6, 4.4, 4, 3.85, 3.5, 3.1, 3, 2.5, 2])
M = np.vander(X, 2, increasing=True)
Mt = np.transpose(M)
I = inv(np.dot(Mt, M))
prom_X=np.mean(X)
prom_Y=np.mean(Y)
VarX = np.sqrt(np.sum( (X - prom_X)**2 ))
VarY = np.sqrt(np.sum( (Y - prom_Y)**2 ))
Cov_X_Y = np.sum( (X-prom_X)*(Y-prom_Y) )
C = np.dot(np.dot(I , Mt), Y)
Z = C[1]*X + C[0]
r = Cov_X_Y / (VarX * VarY)
print("La pendiente es igual a: {}".format(C[1]))
print("El intercepto es igual a: {}".format(C[0]))
print("El coeficiente de correlación lineal es igual a: {}".format(r))
plt.title("Regresión Lineal por el Método Matricial", fontsize=20)
plt.xlabel("Eje X", fontsize=20)
plt.ylabel("Eje Y", fontsize=20)
plt.plot(X,Y, 'ro', markersize=10)
plt.plot(X,Z, color='k', lw=2, label="Y = {:.3f}X + {:.3f}".format(C[1],C[0]))
plt.legend(loc='best', fontsize=15)
plt.show()
Comentarios
Publicar un comentario