Regresión Lineal

Método: Mínimos cuadrados

Introducción

En la presente publicación voy a realizar todo el procedimiento de cálculos de la regresión lineal, a partir de datos aleatorios, por medio del método de mínimos cuadrados de forma manual. Finalmente se comparará con los resultados obtenidos por la función lm().

Generando Datos para Regresión

columnas <- c("indice","X1","X2","X3","y")
x1 <- c(87,90,90,89,97,89,80,89,85,92)
x2 <- c(113,119,117,132,118,124,110,120,137,112)
x3 <- c(128,129,129,143,125,130,117,125,134,117)
y <- c(100,101,112,123,106,112,91,101,105,91)
index <- c(1:10)
df <- data.frame(index,x1,x2,x3,y)

n <- length(df$indice)

colnames(df) <- columnas
df %>%
  kbl() %>%
  kable_styling(bootstrap_options = "striped",full_width = F,position = "center")
indice X1 X2 X3 y
1 87 113 128 100
2 90 119 129 101
3 90 117 129 112
4 89 132 143 123
5 97 118 125 106
6 89 124 130 112
7 80 110 117 91
8 89 120 125 101
9 85 137 134 105
10 92 112 117 91

Modelo de regresión

\[y = \beta_0 + \beta_1 + \epsilon\]

Ecuación de regresión

Se pretende hallar la ecuación que mejor estime el valor de y:

\[E(Y) = {\beta_0}+{\beta_1}.x \]

Parámetros desconocidos

\[\beta_0,\beta_1\]

Ecuación de regresión estimada

\[\hat{y} = b_0 + b_1.x\]
Donde:
-\(\hat{y}\): es el valor predicho.
-\(b_0\): es la intesercción de la recta de regresión con el eje y (ordenada al origen).
-\(b_1\): es la pendiente de la recta de regresión estimada.
-\(x\): variable independiente.

Podemos afirmar que \(b_0\) y \(b_1\) proporcionan estimaciones de \(\beta_0\) y \(\beta_1\)

Cálculo de coeficientes Betas

\[b_0 = \overline{y} - {b{_1}}.\overline{x} \]

\[b_1 = \frac{\sum(x_i-\overline{x}).(y_i-\overline{y})}{\sum(x_i-\overline{x})^2} = \frac{S_y}{S_x}.R\]

Donde:
- S es el desvío de x e y
- R el coeficiente de correlación lineal.

Ejemplo y~X1:

b1_x1 <-(sd(df$y)/sd(df$X1))*cor(x = df$X1,y = df$y,method = "pearson")
b0_x1 <- mean(df$y) - (b1_x1*mean(df$X1))

paste("B_0:",round(b0_x1,3),"   B_1:",round(b1_x1,3))
## [1] "B_0: 51.911    B_1: 0.589"

\[\hat{Y} = 51.91 + 0.58.X_1\]

Control de resultados:

lm(data = df,formula = y~X1)$coefficients
## (Intercept)          X1 
##  51.9111617   0.5888383

Criterio de Mínimos Cuadrados

El metodo de cuadrados minimos propone elegir la recta que minimiza la suma de los cuadrados de las distancias verticales de cada punto a la recta.

\[MINIMIZAR \sum(y_i-\hat{y_i})^2\]


Donde:
- \(y_i\): es el valor observado de la variable.
- \(\hat{y_i}\): es el valor estimado de la variable.

Residuos/Errores y SCE

Son las distancias verticales entre el valor observado \(Y_i\) y el valor estimado \(\hat{Y}\).

La suma de los cuadrados de los residuos o errores es la cantidad que se minimiza empleando el método de mínimos cuadrados. Esta cantidad se llama suma de cuadrados debido al error

\[SCE = \sum(Y_i - \hat{Y_i})^2\]

df <- df %>%
  mutate(
    Y_estimado = b0_x1 + b1_x1*X1,
         residuos = y - Y_estimado, 
         SCE = (y - Y_estimado)^2,
    SCE2 = (y - b0_x1 - b1_x1*X1)^2
)

df  %>% kbl() %>% kable_styling()
indice X1 X2 X3 y Y_estimado residuos SCE SCE2
1 87 113 128 100 103.14009 -3.140091 9.860172 9.860172
2 90 119 129 101 104.90661 -3.906606 15.261570 15.261570
3 90 117 129 112 104.90661 7.093394 50.316240 50.316240
4 89 132 143 123 104.31777 18.682232 349.025805 349.025805
5 97 118 125 106 109.02847 -3.028474 9.171654 9.171654
6 89 124 130 112 104.31777 7.682232 59.016694 59.016694
7 80 110 117 91 99.01822 -8.018223 64.291904 64.291904
8 89 120 125 101 104.31777 -3.317768 11.007582 11.007582
9 85 137 134 105 101.96241 3.037585 9.226925 9.226925
10 92 112 117 91 106.08428 -15.084283 227.535577 227.535577

La suma de los residuos debe ser igual a 0.

paste("La suma de los residuos es: ",round(sum(df$errores),2))
## [1] "La suma de los residuos es:  0"
paste("La suma de cuadrados de los residuos es de: ",round(sum(df$SCE),2))
## [1] "La suma de cuadrados de los residuos es de:  804.71"
df %>%   
  ggplot(aes(x= X1, y = y)) +
  geom_point(color = "blue",size=2) + 
  geom_abline(slope = b1_x1,intercept = b0_x1,color = "blue",show.legend = F) +
  geom_segment(aes(xend = X1, yend = Y_estimado, color = "red"),show.legend = F) +
  labs(title = "Gráfico de Residuos") +
  theme_light() +
  theme(legend.position = 'botttom',
          text=element_text(size=16,  family="serif")) 

Gráfico de residuos

Suma de Cuadrados Totales (SCT)

Mide las distancias verticales de los pares observados a la recta de la ecuación

\[SCT = \sum{(Y_i-\overline{Y}})^2\]

df <- df %>%
  mutate(
    Desviacion = (y  - mean(df$y)),
    SCT = (y-mean(df$y))^2,
    )

df %>%
  kbl() %>%
  kable_styling()
indice X1 X2 X3 y Y_estimado residuos SCE SCE2 Desviacion SCT
1 87 113 128 100 103.14009 -3.140091 9.860172 9.860172 -4.2 17.64
2 90 119 129 101 104.90661 -3.906606 15.261570 15.261570 -3.2 10.24
3 90 117 129 112 104.90661 7.093394 50.316240 50.316240 7.8 60.84
4 89 132 143 123 104.31777 18.682232 349.025805 349.025805 18.8 353.44
5 97 118 125 106 109.02847 -3.028474 9.171654 9.171654 1.8 3.24
6 89 124 130 112 104.31777 7.682232 59.016694 59.016694 7.8 60.84
7 80 110 117 91 99.01822 -8.018223 64.291904 64.291904 -13.2 174.24
8 89 120 125 101 104.31777 -3.317768 11.007582 11.007582 -3.2 10.24
9 85 137 134 105 101.96241 3.037585 9.226925 9.226925 0.8 0.64
10 92 112 117 91 106.08428 -15.084283 227.535577 227.535577 -13.2 174.24
paste("La suma total de cuadrados es de: ",round(sum(df$SCT),2))
## [1] "La suma total de cuadrados es de:  865.6"

Suma de cuadrados debido a la regresión (SCR)

\[SCR = \sum(\hat{Y}-\overline{Y}_i)^2 \]

df <- df %>%
  mutate(SCR = ( Y_estimado - mean(df$y) )^2 )

df %>% kbl() %>% kable_styling()
indice X1 X2 X3 y Y_estimado residuos SCE SCE2 Desviacion SCT SCR
1 87 113 128 100 103.14009 -3.140091 9.860172 9.860172 -4.2 17.64 1.1234068
2 90 119 129 101 104.90661 -3.906606 15.261570 15.261570 -3.2 10.24 0.4992919
3 90 117 129 112 104.90661 7.093394 50.316240 50.316240 7.8 60.84 0.4992919
4 89 132 143 123 104.31777 18.682232 349.025805 349.025805 18.8 353.44 0.0138692
5 97 118 125 106 109.02847 -3.028474 9.171654 9.171654 1.8 3.24 23.3141593
6 89 124 130 112 104.31777 7.682232 59.016694 59.016694 7.8 60.84 0.0138692
7 80 110 117 91 99.01822 -8.018223 64.291904 64.291904 -13.2 174.24 26.8508104
8 89 120 125 101 104.31777 -3.317768 11.007582 11.007582 -3.2 10.24 0.0138692
9 85 137 134 105 101.96241 3.037585 9.226925 9.226925 0.8 0.64 5.0067885
10 92 112 117 91 106.08428 -15.084283 227.535577 227.535577 -13.2 174.24 3.5505204

En el gráfico se muestran los cuadrados debido al error y los cuadrados debido a la regresión.

df %>%   
  ggplot(aes(x= X1, y = y)) +
  geom_point(color = "blue",size=2) + 
  geom_abline(slope = b1_x1,intercept = b0_x1,color = "blue",show.legend = F) +
  geom_segment(aes(xend = X1, yend = Y_estimado, color = "red"),show.legend = F) +
  geom_hline(yintercept = mean(y),linetype = 'dashed') +
  geom_segment(aes(xend = X1, yend = mean(y), color = "green"),show.legend = F) +
  labs(title = "Gráfico CR y CE",subtitle = "Cuadrados debido a la regresión y al error") +
  theme_light() +
  theme(legend.position = 'botttom',
          text=element_text(size=16,  family="serif")) 

Control de resultados

\[SCT = SCR + SCE\]

df <- df %>%
  mutate(Control_SCT = round(SCR + SCE,2))

df %>% select(SCT, Control_SCT) %>% kbl() %>% kable_styling()
SCT Control_SCT
17.64 10.98
10.24 15.76
60.84 50.82
353.44 349.04
3.24 32.49
60.84 59.03
174.24 91.14
10.24 11.02
0.64 14.23
174.24 231.09

Coeficiente de determinación R2

Es una medida de la bondad de ajuste de la ecuación de la regresión estimada.

\[R2 = \frac{SCR}{SCT}\]

r2 = (sum(df$SCR)/sum(df$SCT))*100
r2
## [1] 7.033951

Coeficiente de correlación

r = sqrt(r2)
r
## [1] 2.65216

Supuestos del modelo

Supuesto 1 : Término del Error

\[y = \beta_0+\beta_1.x+\epsilon\]

  • El término del error es una variable aleatoria cuya media es cero \(E(\epsilon)=0\).
  • Por otro lado, la varianza de \(\epsilon\) que se denota como \(\sigma^2\) es la misma para todos los valores de x.
  • Los valores de \(\epsilon\) son independientes.
  • El término del error \(\epsilon\) se distribuye normalmente al igual que la variable y.

Prueba de significancia \(\beta_1\)

  • Si \(\beta_1\) es cero el valor medio de y no depende del valor de x, por lo tanto, podemos conlcuir que x e y no se relacionan linealmente. Por el contrario si es distinto de cero significa que existe una relación lineal, sin embargo, para probar esto se realiza una prueba de hipótesis pero primero se debe calcular \(\sigma^2\).

\(\sigma^2\)

Error cuadrado medio (ECM)

El ECM proporciona una estimación de \(\sigma^2\).

\[S^2 = ECM = \frac{SCE}{n-2}\]

ECM <- sum(df$SCE)/(n-2)
ECM
## [1] -402.3571

Error estandard de estimación

\[S = \sqrt{ECM} = \sqrt{\frac{SCE}{n-2}}\]

sigma <- sqrt(ECM)
sigma
## [1] NaN

Prueba t

\[H_0: \beta_1 = 0 \]

\[H_1: \beta_1 <> 0 \]

df %>%
  ggplot(aes(x = indice ,y = residuos)) +
  geom_point(aes(color = residuos),size = 2) + 
  geom_smooth(method = "lm",se = F,show.legend = F) + 
  labs(title = "Gráfico de residuos") +
theme_light() +
  theme(legend.position = 'botttom',
          text=element_text(size=16,  family="serif"))