Este documento presenta un análisis de regresión simple utilizando los métodos de mínimos cuadrados ordinarios (Least Squares) en R. El objetivo es explorar la relación entre el ingreso familiar semanal y el consumo familiar semanal utilizando un modelo lineal.
library(ggplot2)
library(broom)
library(ggpubr)
## Warning: package 'ggpubr' was built under R version 4.4.1
ingreso <- c(80, 100, 120, 140, 160, 180, 200, 220, 240, 260)
consumo <- c(70, 65, 90, 95, 110, 115, 120, 140, 155, 150)
datos <- data.frame(ingreso, consumo)
Para visualizar la relación entre el ingreso y el consumo, se presenta una gráfica de dispersión que también incluye una línea de regresión ajustada.
grafica_dispersion <- ggplot(datos, aes(x = ingreso, y = consumo)) +
geom_point(color = "blue", size = 3) +
geom_smooth(method = "lm", se = TRUE, color = "red", linetype = "dashed") +
labs(title = "Gráfica de Dispersión entre Ingreso y Consumo",
x = "Ingreso Familiar Semanal (X)",
y = "Consumo Familiar Semanal (Y)") +
theme_minimal()
print(grafica_dispersion)
## `geom_smooth()` using formula = 'y ~ x'
A continuación, ajustamos el modelo de regresión lineal y mostramos un resumen de los resultados.
modelo <- lm(consumo ~ ingreso, data = datos)
summary_modelo <- summary(modelo)
print(summary_modelo)
##
## Call:
## lm(formula = consumo ~ ingreso, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.364 -4.977 1.409 4.364 8.364
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 24.45455 6.41382 3.813 0.00514 **
## ingreso 0.50909 0.03574 14.243 5.75e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.493 on 8 degrees of freedom
## Multiple R-squared: 0.9621, Adjusted R-squared: 0.9573
## F-statistic: 202.9 on 1 and 8 DF, p-value: 5.753e-07
El coeficiente de determinación (R²) indica qué proporción de la variabilidad en la variable dependiente (consumo) es explicada por la variable independiente (ingreso).
total_r2 <- summary_modelo$r.squared
print(paste("Coeficiente de determinación (R²):", round(total_r2, 4)))
## [1] "Coeficiente de determinación (R²): 0.9621"
La significancia del modelo se evalúa utilizando el valor F y su p-valor asociado.
f_statistic <- summary_modelo$fstatistic
f_value <- f_statistic[1]
f_pvalue <- pf(f_value, f_statistic[2], f_statistic[3], lower.tail = FALSE)
print(paste("F-Statistic:", round(f_value, 4)))
## [1] "F-Statistic: 202.8679"
print(paste("Prob (F-Statistic):", signif(f_pvalue, 4)))
## [1] "Prob (F-Statistic): 5.753e-07"
Los coeficientes del modelo, tanto el intercepto como la pendiente, se evalúan para determinar su significancia.
summary_coef <- summary_modelo$coefficients
# Coeficiente C (intercepto)
intercepto <- summary_coef[1, 1]
p_value_intercepto <- summary_coef[1, 4]
print(paste("Intercepto (C):", round(intercepto, 4), "- p-value:", signif(p_value_intercepto, 4)))
## [1] "Intercepto (C): 24.4545 - p-value: 0.005142"
# Coeficiente X (pendiente)
pendiente <- summary_coef[2, 1]
p_value_pendiente <- summary_coef[2, 4]
print(paste("Pendiente (X):", round(pendiente, 4), "- p-value:", signif(p_value_pendiente, 4)))
## [1] "Pendiente (X): 0.5091 - p-value: 5.753e-07"
Para evaluar la normalidad de los residuos, se presentan un histograma y un QQ-plot.
histograma_residuos <- gghistogram(residuals(modelo),
main = "Histograma de los Residuos",
xlab = "Residuos",
fill = "lightblue",
color = "black",
add_density = TRUE)
## Warning: Using `bins = 30` by default. Pick better value with the argument
## `bins`.
print(histograma_residuos)
qqplot_residuos <- ggqqplot(residuals(modelo),
main = "QQ-Plot de los Residuos",
color = "blue")
print(qqplot_residuos)
La ecuación de regresión obtenida, basada en el análisis, es la siguiente:
print(paste("Ecuación de regresión estimada: Y =", round(intercepto, 4), "+", round(pendiente, 4), "* X"))
## [1] "Ecuación de regresión estimada: Y = 24.4545 + 0.5091 * X"