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
<- c("indice","X1","X2","X3","y")
columnas <- c(87,90,90,89,97,89,80,89,85,92)
x1 <- c(113,119,117,132,118,124,110,120,137,112)
x2 <- c(128,129,129,143,125,130,117,125,134,117)
x3 <- c(100,101,112,123,106,112,91,101,105,91)
y <- c(1:10) index
<- data.frame(index,x1,x2,x3,y)
df
<- length(df$indice)
n
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:
<-(sd(df$y)/sd(df$X1))*cor(x = df$X1,y = df$y,method = "pearson")
b1_x1 <- mean(df$y) - (b1_x1*mean(df$X1))
b0_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
)
%>% kbl() %>% kable_styling() df
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 )
%>% kbl() %>% kable_styling() df
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))
%>% select(SCT, Control_SCT) %>% kbl() %>% kable_styling() df
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}\]
= (sum(df$SCR)/sum(df$SCT))*100
r2 r2
## [1] 7.033951
Coeficiente de correlación
= sqrt(r2)
r 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}\]
<- sum(df$SCE)/(n-2)
ECM ECM
## [1] -402.3571
Error estandard de estimación
\[S = \sqrt{ECM} = \sqrt{\frac{SCE}{n-2}}\]
<- sqrt(ECM)
sigma 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"))