En esta sección se importa la base de datos desde el archivo Excel y se verifican los nombres de las variables.
library(readxl)
estudio <- read_excel("C:/Users/bpena/OneDrive/Documentos/2026-1/machine learning/Taller_R.xlsx")
names(estudio)
## [1] "Horas de Estudio"
## [2] "Asistencia (días)"
## [3] "Actividades Extracurriculares (número)"
## [4] "Calificaciones en Matemáticas"
## [5] "Calificaciones en Ciencias"
Se ajustan tres modelos de regresión lineal simple donde la variable respuesta es Calificaciones en Matemáticas.
m1 <- lm(`Calificaciones en Matemáticas` ~ `Horas de Estudio`, data = estudio)
summary(m1)
##
## Call:
## lm(formula = `Calificaciones en Matemáticas` ~ `Horas de Estudio`,
## data = estudio)
##
## Residuals:
## Min 1Q Median 3Q Max
## -8.0738 -1.0646 -0.1103 0.8440 3.8897
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 53.4026 0.9039 59.08 <2e-16 ***
## `Horas de Estudio` 3.9635 0.1312 30.20 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.699 on 48 degrees of freedom
## Multiple R-squared: 0.95, Adjusted R-squared: 0.949
## F-statistic: 912.1 on 1 and 48 DF, p-value: < 2.2e-16
summary(m1)$r.squared
## [1] 0.9500027
m2 <- lm(`Calificaciones en Matemáticas` ~ `Asistencia (días)`, data = estudio)
summary(m2)
##
## Call:
## lm(formula = `Calificaciones en Matemáticas` ~ `Asistencia (días)`,
## data = estudio)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.2235 -2.1108 -0.3794 3.5055 6.6230
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 32.3865 4.2112 7.691 6.48e-10 ***
## `Asistencia (días)` 2.1535 0.1899 11.341 3.52e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.96 on 48 degrees of freedom
## Multiple R-squared: 0.7282, Adjusted R-squared: 0.7226
## F-statistic: 128.6 on 1 and 48 DF, p-value: 3.518e-15
summary(m2)$r.squared
## [1] 0.7282123
m3 <- lm(`Calificaciones en Matemáticas` ~
`Actividades Extracurriculares (número)`, data = estudio)
summary(m3)
##
## Call:
## lm(formula = `Calificaciones en Matemáticas` ~ `Actividades Extracurriculares (número)`,
## data = estudio)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.0172 -2.7779 -0.0279 1.9721 8.9828
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 66.0491 1.6618 39.744 < 2e-16
## `Actividades Extracurriculares (número)` 4.9894 0.5571 8.957 8.21e-12
##
## (Intercept) ***
## `Actividades Extracurriculares (número)` ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.648 on 48 degrees of freedom
## Multiple R-squared: 0.6257, Adjusted R-squared: 0.6179
## F-statistic: 80.22 on 1 and 48 DF, p-value: 8.212e-12
summary(m3)$r.squared
## [1] 0.6256526
Ahora se analiza como variable respuesta las Calificaciones en Ciencias.
m4 <- lm(`Calificaciones en Ciencias` ~ `Horas de Estudio`, data = estudio)
summary(m4)
##
## Call:
## lm(formula = `Calificaciones en Ciencias` ~ `Horas de Estudio`,
## data = estudio)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.2607 -0.9269 -0.1160 0.9563 4.0287
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 56.8596 1.0351 54.93 <2e-16 ***
## `Horas de Estudio` 3.8223 0.1503 25.43 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.945 on 48 degrees of freedom
## Multiple R-squared: 0.9309, Adjusted R-squared: 0.9295
## F-statistic: 646.9 on 1 and 48 DF, p-value: < 2.2e-16
summary(m4)$r.squared
## [1] 0.9309301
m5 <- lm(`Calificaciones en Ciencias` ~ `Asistencia (días)`, data = estudio)
summary(m5)
##
## Call:
## lm(formula = `Calificaciones en Ciencias` ~ `Asistencia (días)`,
## data = estudio)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.5388 -2.0032 -0.0675 3.5968 6.3755
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 36.3962 4.1663 8.736 1.74e-11 ***
## `Asistencia (días)` 2.0857 0.1879 11.102 7.40e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.918 on 48 degrees of freedom
## Multiple R-squared: 0.7197, Adjusted R-squared: 0.7139
## F-statistic: 123.3 on 1 and 48 DF, p-value: 7.401e-15
summary(m5)$r.squared
## [1] 0.7197218
m6 <- lm(`Calificaciones en Ciencias` ~
`Actividades Extracurriculares (número)`, data = estudio)
summary(m6)
##
## Call:
## lm(formula = `Calificaciones en Ciencias` ~ `Actividades Extracurriculares (número)`,
## data = estudio)
##
## Residuals:
## Min 1Q Median 3Q Max
## -10.4878 -2.6886 -0.5882 2.9108 9.3114
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 69.090 1.653 41.804 < 2e-16
## `Actividades Extracurriculares (número)` 4.799 0.554 8.663 2.23e-11
##
## (Intercept) ***
## `Actividades Extracurriculares (número)` ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.622 on 48 degrees of freedom
## Multiple R-squared: 0.6099, Adjusted R-squared: 0.6018
## F-statistic: 75.05 on 1 and 48 DF, p-value: 2.235e-11
summary(m6)$r.squared
## [1] 0.6099026
Se analizan los residuos estandarizados mediante gráficos de dispersión y QQ-Plot.
residuos <- rstandard(m1)
valores_ajustados <- fitted(m1)
plot(valores_ajustados, residuos,
main="Residuos vs Ajustados (m1)")
qqnorm(residuos)
qqline(residuos)
residuos <- rstandard(m2)
valores_ajustados <- fitted(m2)
plot(valores_ajustados, residuos,
main="Residuos vs Ajustados (m2)")
qqnorm(residuos)
qqline(residuos)
residuos <- rstandard(m3)
valores_ajustados <- fitted(m3)
plot(valores_ajustados, residuos,
main="Residuos vs Ajustados (m3)")
qqnorm(residuos)
qqline(residuos)
residuos <- rstandard(m4)
valores_ajustados <- fitted(m4)
plot(valores_ajustados, residuos,
main="Residuos vs Ajustados (m4)")
qqnorm(residuos)
qqline(residuos)
residuos <- rstandard(m5)
valores_ajustados <- fitted(m5)
plot(valores_ajustados, residuos,
main="Residuos vs Ajustados (m5)")
qqnorm(residuos)
qqline(residuos)
residuos <- rstandard(m6)
valores_ajustados <- fitted(m6)
plot(valores_ajustados, residuos,
main="Residuos vs Ajustados (m6)")
qqnorm(residuos)
qqline(residuos)
Se realizan predicciones para valores entre 1 y 10 en cada variable explicativa.
# M1
nuevo_m1 <- data.frame("Horas de Estudio" = seq(1,10),
check.names = FALSE)
predict(m1, newdata = nuevo_m1)
## 1 2 3 4 5 6 7 8
## 57.36605 61.32951 65.29298 69.25645 73.21991 77.18338 81.14685 85.11032
## 9 10
## 89.07378 93.03725
# M2
nuevo_m2 <- data.frame("Asistencia (días)" = seq(1,10),
check.names = FALSE)
predict(m2, newdata = nuevo_m2)
## 1 2 3 4 5 6 7 8
## 34.54002 36.69350 38.84698 41.00046 43.15394 45.30742 47.46089 49.61437
## 9 10
## 51.76785 53.92133
# M3
nuevo_m3 <- data.frame("Actividades Extracurriculares (número)" = seq(1,10),
check.names = FALSE)
predict(m3, newdata = nuevo_m3)
## 1 2 3 4 5 6 7 8
## 71.03849 76.02787 81.01724 86.00661 90.99598 95.98535 100.97472 105.96409
## 9 10
## 110.95346 115.94283
# M4
nuevo_m4 <- data.frame("Horas de Estudio" = seq(1,10),
check.names = FALSE)
predict(m4, newdata = nuevo_m4)
## 1 2 3 4 5 6 7 8
## 60.68195 64.50430 68.32665 72.14900 75.97135 79.79370 83.61605 87.43840
## 9 10
## 91.26074 95.08309
# M5
nuevo_m5 <- data.frame("Asistencia (días)" = seq(1,10),
check.names = FALSE)
predict(m5, newdata = nuevo_m5)
## 1 2 3 4 5 6 7 8
## 38.48191 40.56761 42.65332 44.73902 46.82473 48.91043 50.99614 53.08184
## 9 10
## 55.16755 57.25325
# M6
nuevo_m6 <- data.frame("Actividades Extracurriculares (número)" = seq(1,10),
check.names = FALSE)
predict(m6, newdata = nuevo_m6)
## 1 2 3 4 5 6 7 8
## 73.88940 78.68860 83.48779 88.28699 93.08618 97.88538 102.68457 107.48377
## 9 10
## 112.28296 117.08216
Se calculan intervalos de confianza al 95% y 90% para los coeficientes.
confint(m1); confint(m1, level = 0.90)
## 2.5 % 97.5 %
## (Intercept) 51.585094 55.220064
## `Horas de Estudio` 3.699592 4.227342
## 5 % 95 %
## (Intercept) 51.886476 54.918682
## `Horas de Estudio` 3.743349 4.183585
confint(m2); confint(m2, level = 0.90)
## 2.5 % 97.5 %
## (Intercept) 23.919302 40.853791
## `Asistencia (días)` 1.771676 2.535281
## 5 % 95 %
## (Intercept) 25.323370 39.449723
## `Asistencia (días)` 1.834987 2.471969
confint(m3); confint(m3, level = 0.90)
## 2.5 % 97.5 %
## (Intercept) 62.707757 69.390490
## `Actividades Extracurriculares (número)` 3.869342 6.109399
## 5 % 95 %
## (Intercept) 63.261835 68.836413
## `Actividades Extracurriculares (número)` 4.055069 5.923672
confint(m4); confint(m4, level = 0.90)
## 2.5 % 97.5 %
## (Intercept) 54.778459 58.940739
## `Horas de Estudio` 3.520195 4.124504
## 5 % 95 %
## (Intercept) 55.123561 58.59564
## `Horas de Estudio` 3.570299 4.07440
confint(m5); confint(m5, level = 0.90)
## 2.5 % 97.5 %
## (Intercept) 28.019350 44.773054
## `Asistencia (días)` 1.707978 2.463432
## 5 % 95 %
## (Intercept) 29.408429 43.383975
## `Asistencia (días)` 1.770614 2.400796
confint(m6); confint(m6, level = 0.90)
## 2.5 % 97.5 %
## (Intercept) 65.767189 72.413219
## `Actividades Extracurriculares (número)` 3.685319 5.913073
## 5 % 95 %
## (Intercept) 66.318223 71.862185
## `Actividades Extracurriculares (número)` 3.870026 5.728366
Se ajustaron seis modelos de regresión lineal simple para evaluar la relación entre variables académicas (horas de estudio, asistencia y actividades extracurriculares) y el rendimiento en Matemáticas y Ciencias.
Además, se verificaron los supuestos mediante el análisis gráfico de residuos, se realizaron predicciones y se calcularon intervalos de confianza para los parámetros estimados.