RLS con ggplot2
La librería ggplot2
con la función geom_smooth()
muestra
gráficamente el ajuste de la Regresión Lineal Simple.
Código en R:
datos = read.csv("DatosCafe.csv", sep = ";", dec = ",", header = T)
print(head(datos))
Fecha PrecioInterno PrecioInternacional Producción Exportaciones TRM
1 ene-00 371375 130.12 658 517 1923.57
2 feb-00 354297 124.72 740 642 1950.64
3 mar-00 360016 119.51 592 404 1956.25
4 abr-00 347538 112.67 1055 731 1986.77
5 may-00 353750 110.31 1114 615 2055.69
6 jun-00 341688 100.30 1092 869 2120.17
EUR
1 1916.0
2 1878.5
3 1875.0
4 1832.0
5 1971.5
6 2053.5
X = datos$Producción
y = datos$Exportaciones
regression <- lm(Exportaciones ~ Producción, data = datos)
regression
Call:
lm(formula = Exportaciones ~ Producción, data = datos)
Coefficients:
(Intercept) Producción
235.3538 0.6769
library(ggplot2)
En la función geom_smooth()
se agrega el argumento method = "lm"
para el ajuste de Regresión Lineal (Linear Method).
ggplot(data = datos, aes(X, y)) +
geom_point() +
geom_smooth(formula = y ~ x, method = "lm") + # RLS
labs(title = paste("R2 = ", signif(summary(regression)$r.squared, 2), # R 2 con dos decimales
"Intercept =", signif(regression$coef[[1]], 2), # Beta 0 con dos decimales
" Slope =", signif(regression$coef[[2]], 2), # Beta 1 con dos decimales
" Valor - p =", signif(summary(regression)$coef[2,4], 2))) # Valor p con dos decimales
![../../_images/output_8_02.png](../../_images/output_8_02.png)
En geom_smooth()
muestra por defecto el \(SE(\hat{\beta_1})\):
Es el error estándar de \(\hat{\beta_1}\), con el argumento se
.
ggplot(data = datos, aes(X, y)) +
geom_point() +
geom_smooth(formula = y ~ x, method = "lm", se = F) + # Se elimina el error estándar de Beta 1
labs(title = paste("R2 = ", signif(summary(regression)$r.squared, 2),
"Intercept =", signif(regression$coef[[1]], 2),
" Slope =", signif(regression$coef[[2]], 2),
" Valor - p =", signif(summary(regression)$coef[2,4], 2)))
![../../_images/output_10_06.png](../../_images/output_10_06.png)
y_pred = regression$fitted.values
print(head(y_pred))
1 2 3 4 5 6
680.7329 736.2360 636.0596 949.4494 989.3846 974.4935
residuales = regression$residuals
print(head(residuales))
1 2 3 4 5 6
-163.73288 -94.23604 -232.05960 -218.44941 -374.38461 -105.49352
Gráficos del modelo de RLS con ggplot2:
p1 <- ggplot(data = datos, aes(X, y)) +
geom_point() +
geom_smooth(formula = y ~ x, method = "lm", se = F) +
theme_bw() +
labs(title = paste("Beta 0 =", signif(regression$coef[[1]], 2),
"Beta 1 =", signif(regression$coef[[2]], 2),
"\nR2 =", signif(summary(regression)$r.squared, 2),
"\nValor-p =", signif(summary(regression)$coef[2,4], 2)),
x = "Producción de café",
y = "Exportaciones de café")
p2 <- ggplot(data = datos, aes(X)) +
geom_histogram(color = "#63B8FF", fill = "#63B8FF", bins = 30) +
labs(title = "Distribución Residuales",
x = "Residuales",
y = "Frecuencia relativa") +
theme_bw()
p3 <- ggplot(data = data.frame(residuales),
aes(sample = residuales)) +
stat_qq() +
stat_qq_line() +
labs(title = "QQ-Plot") +
theme_bw()
p4 <- ggplot(data = data.frame(y_pred, residuales),
aes(x = y_pred, y = residuales)) +
geom_point(color = "#63B8FF") +
geom_hline(yintercept = 0, color = "darkred") +
labs(x = "Predicciones", y = "Residuales") +
theme_bw()
Los cuatro gráficos de los resultados de la regresión se mostrarán en
uno solo. Se usará la función grid.arrange()
de la librería
library(gridExtra)
.
library(gridExtra)
grid.arrange(p1, p2, p3, p4, ncol = 2)
![../../_images/output_16_04.png](../../_images/output_16_04.png)
Para darle más importancia a un gráfico el entorno visual se dividirá por vectores y los números dentro de cada vector serán los gráficos.
library(gridExtra)
grid.arrange(p1, p2, p3, p4, ncol = 4,
layout_matrix = cbind(c(1,1,1), c(1,1,1), c(2,3,4), c(2,3,4)))
![../../_images/output_18_01.png](../../_images/output_18_01.png)
Parámetros de la regresión:
print(summary(regression)$coef)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 235.3538372 29.77755312 7.903733 7.538088e-14
Producción 0.6768678 0.02961839 22.852960 2.530485e-64