id sexo edad grupo_edad tipo_universidad
Min. : 1.0 F:229 Min. :18.00 18-20: 97 Privada:152
1st Qu.:100.8 M:171 1st Qu.:21.00 21-23:187 Pública:248
Median :200.5 Median :22.00 24-26:102
Mean :200.5 Mean :22.15 27-30: 14
3rd Qu.:300.2 3rd Qu.:24.00
Max. :400.0 Max. :28.00
carrera trabaja horas_estudio horas_sueno uso_redes_horas
Administración:94 No:258 Min. :0.000 Min. :4.000 Min. :0.000
Contaduría :74 Sí:142 1st Qu.:1.713 1st Qu.:6.148 1st Qu.:2.324
Economía :70 Median :2.589 Median :6.841 Median :3.374
Ingeniería :94 Mean :2.524 Mean :6.858 Mean :3.389
Otra :68 3rd Qu.:3.306 3rd Qu.:7.684 3rd Qu.:4.495
Max. :6.568 Max. :9.000 Max. :8.000
nivel_estres salud_autopercibida estres_1 estres_2
Min. :1.00 Min. :1.000 Min. :1.000 Min. :1.000
1st Qu.:2.00 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000
Median :3.00 Median :3.000 Median :3.000 Median :3.000
Mean :2.99 Mean :2.982 Mean :2.987 Mean :2.985
3rd Qu.:4.00 3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:4.000
Max. :5.00 Max. :5.000 Max. :5.000 Max. :5.000
estres_3 estres_4 promedio_notas
Min. :1.000 Min. :1.000 Min. :4.000
1st Qu.:2.000 1st Qu.:2.000 1st Qu.:5.540
Median :3.000 Median :3.000 Median :6.300
Mean :2.933 Mean :2.993 Mean :6.228
3rd Qu.:4.000 3rd Qu.:4.000 3rd Qu.:6.930
Max. :5.000 Max. :5.000 Max. :8.680
# 7. Guardar en CSV --------------------------------------------write.csv(datos, file ="encuesta_salud_estudiantes.csv", row.names =FALSE)
1 Configuración inicial en R
Actividad 1. Carga de datos y estructura
Importamos el archivo encuesa_salud_estudiantes.csv en R y lo asignamos al objeto datos.
datos <-read.csv("encuesta_salud_estudiantes.csv", header =TRUE)
Mostramos la estructura del objeto usando la función str(datos).
El dataset contiene 400 observaciones y 17 variables. Entre las variables numéricas se incluyen: edad (int), horas_estudio (num) y promedio_notas (num). Entre las variables categóricas se encuentran: sexo (chr), grupo_edad (chr) y tipo_universidad (chr).
Actividad 2. Limpieza mínima
Verifica si hay valores perdidos (NA) en las variables promedio_nota, horas_estudio, horas_sueno, uso_redes_horas y salud_autopercibida.
Ninguna de las variables analizadas presenta valores perdidos (NA). Esto significa que todas las observaciones en estas variables están completas, lo cual facilita su análisis estadístico sin necesidad de imputación o eliminación de filas.
Describe que decisión tomarías si hubiera pocos valores perdidos (por ejemplo, eliminarlos) y que alternativa propondrías si hubiera muchos valores perdidos (sin necesidad de implementarla).
En caso de existir pocos valores perdidos, una opción válida sería eliminar las observaciones afectadas, ya que su impacto estadístico sería mínimo. En cambio, si la cantidad de valores perdidos fuera considerable, se recomendaría utilizar algún método como (media, mediana, modelos predictivos, etc.) para evitar la pérdida excesiva de información.
Actividad 3. Recodificación básica
A partir de la variable sexo, crea una nueva variable factor llamada sexo con etiquetas “Masculino” y “Femenino.
La variable sexo fue recodificada a un factor llamado sexo_factor, asignando las etiquetas “Masculino” y “Femenino” a los valores originales "M" y "F".
Al verificar la distribución mediante table(datos$sexo_factor), se observa que en la base de datos hay 171 estudiantes masculinos y 229 estudiantes femeninos. Esto indica que la muestra contiene una mayor proporción de mujeres, lo cual es relevante para cualquier análisis que compare niveles de salud, estrés o rendimiento académico entre sexos. Verifica que R la reconozca como factor usando str() y table().
Se creó la variable sexo_factor a partir de sexo, convirtiéndola en factor con las etiquetas “Masculino” y “Femenino”. La tabla de frecuencias muestra que hay 171 hombres y 229 mujeres en la muestra. Esto indica que la mayor parte de los participantes son mujeres (57%) frente a hombres (43%). Por lo tanto, la muestra presenta un ligero predominio del sexo femenino.
2 Estadística descriptiva y gráficos
Actividad 4. Medidas descriptiva
Calcula para promedio_notas, horas_estudio y horas_sueno: media, mediana, desviación estándar, mínimo, máximo y cuartiles.
promedio_notas horas_estudio horas_sueno
Min. :4.000 Min. :0.000 Min. :4.000
1st Qu.:5.540 1st Qu.:1.713 1st Qu.:6.148
Median :6.300 Median :2.589 Median :6.841
Mean :6.228 Mean :2.524 Mean :6.858
3rd Qu.:6.930 3rd Qu.:3.306 3rd Qu.:7.684
Max. :8.680 Max. :6.568 Max. :9.000
sd(datos$promedio_notas)
[1] 0.9655955
sd(datos$horas_estudio)
[1] 1.134729
sd(datos$horas_sueno)
[1] 1.039808
Para las tres variables se obtuvieron sus medidas principales.
En promedio_notas, las notas van desde 4.00 hasta 8.68, con una media de 6.23 y una mediana de 6.30. Esto muestra que las notas se concentran alrededor de ese nivel.
En horas_estudio, los valores van desde 0 hasta 6.57 horas al día, con una media de 2.52 y una mediana de 2.59. Esto indica que, en general, los estudiantes estudian pocas horas al día.
En horas_sueno, los estudiantes duermen entre 4 y 9 horas, con una media de 6.86 y una mediana de 6.84, lo cual refleja que la mayoría duerme entre 6 y 7 horas.
Las desviaciones estándar fueron:
promedio_notas: 0.97
horas_estudio: 1.13
horas_sueno: 1.04
Estas desviaciones ayudan a ver qué tan dispersos están los datos en cada variable.
Interpreta en lenguaje sencillo:
¿Cuál de las tres variables presenta mayor dispersión?
La variable con mayor dispersión es horas_estudio, porque tiene la desviación estándar más alta (1.13).
Esto significa que, entre las tres variables, es en las horas de estudio donde los estudiantes muestran más diferencia entre sí.
¿Los estudiantes duermen, en promedio, más o menos de 7 horas?
El promedio de horas_sueno es 6.86, que es un valor menor a 7.
Por lo tanto, los estudiantes duermen en promedio menos de 7 horas al día.
Actividad 5. Distribuciones y forma
Construye un histograma y un diagrama de caja (boxplot) para la variable promedio_notas.
Histograma de promedio_notas
hist(datos$promedio_notas,main ="Histograma de Promedio de Notas",xlab ="Promedio de notas",ylab ="Frecuencia")
Boxplot de promedio_notas
boxplot(datos$promedio_notas,main ="Diagrama de Caja de Promedio de Notas",ylab ="Promedio de notas")
Comenta:
¿La distribución parece aproximadamente simétrica, sesgada a la izquierda o a la derecha?
En el histograma, los valores se concentran alrededor de 6 y 7, y las barras de ambos lados bajan de forma parecida. Esto muestra que la distribución es bastante simétrica, sin inclinación fuerte hacia la izquierda o hacia la derecha.
En el boxplot no aparecen puntos sueltos fuera de los límites, lo que indica que no hay valores claramente atípicos. Las notas están dentro de un rango normal y no se ven observaciones extremas.
Actividad 6. Gráficos por grupos
Elabora un diagrama de caja de promedio_notas por sexo_factor.
boxplot(promedio_notas ~ sexo_factor,data = datos,main ="Promedio de Notas por Sexo",xlab ="Sexo",ylab ="Promedio de notas")
¿Qué grupo parece tener mayor promedio de notas?
En el boxplot se observa que la mediana de Femenino está un poco más alta que la de Masculino.
Esto indica que las mujeres tienen un promedio de notas ligeramente mayor que los hombres.
La diferencia no es muy grande, pero sí se nota que el grupo femenino está un poco más arriba.
Realiza un gráfico de barras del valor medio de nivel_estres por carrera (o por sexo_factor si lo prefieres).
Por carrera:
library(dplyr)
Warning: package 'dplyr' was built under R version 4.4.3
Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
prom_estres <- datos %>%group_by(carrera) %>%summarise(media_estres =mean(nivel_estres))barplot(prom_estres$media_estres,names.arg = prom_estres$carrera,las =2,main ="Nivel de Estrés Promedio por Carrera",ylab ="Nivel de estrés promedio",cex.names =0.8)
¿Se observan diferencias claras en el nivel de estrés entre los grupos?
El gráfico de barras muestra que los promedios de estrés por carrera son muy parecidos.
Las barras tienen alturas casi iguales, así que no hay diferencias claras en el nivel de estrés entre los grupos. En general, todas las carreras presentan un nivel de estrés similar.
3 Contrastes de hipótesis paramétricos
Actividad 7. Comparación de medias entre dos grupos
Plantea las hipótesis:
H0: No hay diferencia en el promedio de notas entre hombres y mujeres.
H1: Sí existe una diferencia en el promedio de notas entre hombres y mujeres.
Revisa los supuestos de la prueba:
Normalidad aproximada de promedio_notas en cada grupo
(puede ser con histogramas, Q-Q plots o prueba Shapiro-Wilk)
Shapiro-Wilk normality test
data: datos$promedio_notas[datos$sexo_factor == "Femenino"]
W = 0.98833, p-value = 0.05955
Homogeneidad de varianzas (var.test o prueba de Levene)
var.test(promedio_notas ~ sexo_factor, data = datos)
F test to compare two variances
data: promedio_notas by sexo_factor
F = 0.99281, num df = 170, denom df = 228, p-value = 0.9655
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.7512643 1.3197269
sample estimates:
ratio of variances
0.9928111
Prueba t
t.test(promedio_notas ~ sexo_factor, data = datos)
Welch Two Sample t-test
data: promedio_notas by sexo_factor
t = 0.11435, df = 367.07, p-value = 0.909
alternative hypothesis: true difference in means between group Masculino and group Femenino is not equal to 0
95 percent confidence interval:
-0.1808767 0.2032123
sample estimates:
mean in group Masculino mean in group Femenino
6.234094 6.222926
Si los supuestos se cumplen, realiza una prueba t para dos muestras independientes:
t.test(promedio_notas ~ sexo_factor, data = datos, var.equal =TRUE/FALSE)
Two Sample t-test
data: promedio_notas by sexo_factor
t = 0.11429, df = 398, p-value = 0.9091
alternative hypothesis: true difference in means between group Masculino and group Femenino is not equal to 0
95 percent confidence interval:
-0.1809280 0.2032637
sample estimates:
mean in group Masculino mean in group Femenino
6.234094 6.222926
Reporta el estadístico t, los grados de libertad, el valor-p y la conclusión en el contexto del problema.
El resultado de la prueba t arrojó un estadístico t = 0.114, con df ≈ 398, y un valor-p = 0.909. Como el valor-p es mucho mayor que 0.05, no se rechaza la hipótesis nula, lo que significa que no hay evidencia de una diferencia significativa en el promedio de notas entre hombres y mujeres.
Ambos grupos presentan medias muy similares (Masculino = 6.23, Femenino = 6.22).
Si los supuestos no se cumplen claramente, comenta las limitaciones de la prueba.
En este caso los supuestos sí se cumplen:
Las pruebas de normalidad tuvieron valores-p mayores a 0.05.
La prueba de homogeneidad de varianzas también tuvo un valor-p alto (0.9655).
Por lo tanto, la prueba t es adecuada y sus resultados son confiables. Si no se hubieran cumplido, la limitación sería que la prueba t podría no ser válida y habría que usar una prueba no paramétrica como Mann-Whitney.)
Actividad 8. ANOVA de una vía
Plantea las hipótesis:
H0: las medias de promedio_notas son iguales en todos los grupos.
H1: al menos una de las medias difiere.
Ajusta un modelo ANOVA de una vía:
anova_univ <-aov(promedio_notas ~ tipo_universidad, data = datos)summary(anova_univ)
Df Sum Sq Mean Sq F value Pr(>F)
tipo_universidad 1 0.3 0.3186 0.341 0.559
Residuals 398 371.7 0.9339
Reporta el estadístico F, los grados de libertad y el valor-p.
Los resultados del ANOVA indican que el tipo de universidad no está asociado con diferencias significativas en el promedio de notas. El valor-p de 0.559 muestra que las medias entre los estudiantes de universidades públicas y privadas son estadísticamente similares. Por lo tanto, con los datos disponibles, no se puede concluir que asistir a un tipo de universidad influya en el rendimiento académico promedio.
Si el resultado es significativo, indica qué prueba post hoc utilizarías (por ejemplo, prueba de Tukey) y qué comparaciones realizarías (no es necesario ejecutarla).
Como el resultado no fue significativo, no es necesario realizar pruebas post hoc. Se incluiría una prueba de Tukey solo cuando el valor-p sea menor a 0.05.
4 Contrastes no param´etricos y escala Likert
Actividad 9. Comparación no paramétrica de dos grupos
Plantea las hipótesis en términos de medianas o distribuciones:
H0: las distribuciones (o medianas) de nivel estres son iguales en ambos grupos.
H1: las distribuciones (o medianas) de nivel estres difieren.
Aplica la prueba de Mann–Whitney (Wilcoxon de rango-suma):
wilcox.test(nivel_estres ~ sexo_factor, data = datos)
Wilcoxon rank sum test with continuity correction
data: nivel_estres by sexo_factor
W = 20361, p-value = 0.476
alternative hypothesis: true location shift is not equal to 0
Reporta el estadístico de prueba, el valor-p y la conclusión en el contexto.
El estadístico de la prueba fue W = 20361 y el valor-p obtenido fue 0.476. Como este valor-p es mayor que 0.05, no se rechaza la hipótesis nula. En conclusión, no hay evidencia de que el nivel de estrés sea diferente entre hombres y mujeres; ambos grupos muestran distribuciones muy parecidas.
Actividad 10. Comparación no paramétrica de más de dos grupos
Analiza si la salud autopercibida (salud autopercibida) difiere entre los distintos grupos de edad (grupo edad).
Plantea H0 y H1 para la prueba de Kruskal–Wallis.
• H0: las distribuciones (o medianas) de salud autopercibida son iguales en todos los grupos de edad.
• H1: al menos un grupo de edad tiene una distribución (o mediana) diferente.
Aplica:
kruskal.test(salud_autopercibida ~ grupo_edad)
Kruskal-Wallis rank sum test
data: salud_autopercibida by grupo_edad
Kruskal-Wallis chi-squared = 1.6037, df = 3, p-value = 0.6586
Reporta el estadístico de prueba, los grados de libertad y el valor-p.
La prueba de Kruskal-Wallis dio un estadístico chi-cuadrado = 1.6037, con 3 grados de libertad y un valor-p = 0.6586. Como el valor-p es bastante mayor que 0.05, no se rechaza la hipótesis nula. En conclusión, los grupos de edad no muestran diferencias claras en la salud autopercibida; todos los grupos reportan niveles muy parecidos.
Si el resultado es significativo, explica qué prueba post hoc no paramétrica podrías utilizar (por ejemplo, pairwise.wilcox.test() con corrección de Bonferroni) y qué comparaciones realizarías.
Como el resultado no es significativo, no es necesario hacer pruebas post hoc.
Actividad 11. Bloque de ítems Likert de estrés
Considera los ítems estres 1, estres 2, estres 3 y estres 4, todos en escala 1–5 y relacionados con el estrés académico.
Calcula la media y la desviación estándar de cada ítem por separado.
Crea una nueva variable que resuma el estrés académico global, por ejemplo:
estres_total = estres_1 + estres_2 + estres_3 + estres_4
Explica brevemente cómo interpretar un valor alto de estres_total.
Un valor alto de estres_total significa que el estudiante respondió con valores altos en los cuatro ítems de estrés. Esto indica que la persona percibe un nivel más elevado de estrés académico. En cambio, valores bajos reflejan que el estudiante siente poco estrés. Esta medida sirve para resumir el estrés general combinando todas las preguntas del bloque.
(Opcional) Menciona cómo podrías evaluar la consistencia interna del conjunto de ítems (por ejemplo, usando el alfa de Cronbach).
La consistencia interna del bloque de ítems se puede evaluar usando el alfa de Cronbach. Este indicador muestra qué tan bien funcionan los ítems juntos y si realmente están midiendo el mismo concepto de estrés académico. Un valor alto de alfa indica que los cuatro ítems están bien relacionados entre sí.
5 Modelos de regresión lineal
Actividad 12. Regresión lineal simple I
Ajusta un modelo de regresión lineal simple:
modelo1 <-lm(promedio_notas ~ horas_estudio, data = datos)
Escribe la ecuación estimada del modelo: \[
\hat{Y} = 5.42159 + 0.31942 \times \text{horas\_estudio}
\]
Interpreta el coeficiente β̂1 en el contexto del problema.
El valor de β̂1 = 0.31942 significa que, por cada hora adicional de estudio al día, el promedio de notas aumenta en aproximadamente 0.32 puntos, en promedio.
Es decir, estudiar más horas está asociado con mejores calificaciones.
Comenta el valor de R²:
• ¿Qué porcentaje de la variabilidad de las notas explica este modelo?
summary(modelo1) # Para obtener coeficientes y R^2
Call:
lm(formula = promedio_notas ~ horas_estudio, data = datos)
Residuals:
Min 1Q Median 3Q Max
-2.63945 -0.62850 0.03278 0.64880 2.15003
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 5.42159 0.10937 49.570 < 2e-16 ***
horas_estudio 0.31942 0.03954 8.079 7.87e-15 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.8961 on 398 degrees of freedom
Multiple R-squared: 0.1409, Adjusted R-squared: 0.1387
F-statistic: 65.27 on 1 and 398 DF, p-value: 7.866e-15
El R² = 0.1409 indica que el modelo explica alrededor del 14% de la variabilidad en las notas de los estudiantes.
Esto quiere decir que las horas de estudio sí tienen relación con las notas, pero todavía hay muchos otros factores que también influyen.
Actividad 13. Regresión lineal simple II
Repite el análisis usando horas_sueno como predictor:
modelo2 <-lm(promedio_notas ~ horas_sueno, data = datos)summary(modelo2) # Esto da coeficientes y R^2
Call:
lm(formula = promedio_notas ~ horas_sueno, data = datos)
Residuals:
Min 1Q Median 3Q Max
-2.52898 -0.61751 0.03524 0.66708 2.11177
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.7226 0.2968 12.542 < 2e-16 ***
horas_sueno 0.3653 0.0428 8.536 2.96e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.8889 on 398 degrees of freedom
Multiple R-squared: 0.1547, Adjusted R-squared: 0.1526
F-statistic: 72.86 on 1 and 398 DF, p-value: 2.962e-16
El modelo con horas_sueno explica un porcentaje ligeramente mayor de la variabilidad de las notas.
Indica cuál de las dos variables (horas de estudio o horas de sueño) parece ser mejor predictor individual del promedio de notas.
Entre las dos variables, horas_sueno es un mejor predictor individual del promedio de notas, porque tiene un R² un poco más alto y un efecto positivo más fuerte en el modelo.
A partir del resumen del modelo (summary(modelo3)):
• Identifica qué predictores son estadísticamente significativos (valor-p menor que 0.05).
• Indica el signo (positivo o negativo) de cada coeficiente e interpreta dicho signo en el contexto.
Significativos (p < 0.05):
horas_estudio (+)
horas_sueno (+)
uso_redes_horas (–)
nivel_estres (–)
No significativo:
salud_autopercibida (p = 0.636)
Interpretación de cada signo
horas_estudio (+): estudiar más está asociado con mejores notas.
horas_sueno (+): dormir más también mejora el promedio.
uso_redes_horas (–): más horas en redes se relaciona con notas más bajas.
nivel_estres (–): mayor estrés se asocia con peor rendimiento.
salud_autopercibida: no muestra relación clara con las notas en este modelo.
Compara el R² y el R² ajustado de modelo3 con los valores de los modelos simples (modelo1 y modelo2).
modelo1 (horas_estudio): R² = 0.1409
modelo2 (horas_sueno): R² = 0.1547
modelo3 (múltiple):
R² = 0.5223
R² ajustado = 0.5163
El modelo múltiple explica más de la mitad de la variabilidad de las notas, mucho más que los modelos simples.
Comenta si la inclusión de más variables mejora de forma importante la capacidad explicativa del modelo y si los resultados tienen sentido práctico.
Agregar más variables mejora bastante la capacidad explicativa del modelo. Esto tiene sentido porque el rendimiento académico depende de varios factores a la vez, no solo de horas de estudio o sueño. Los resultados reflejan relaciones lógicas: estudiar y dormir ayudan, mientras que el estrés y el uso excesivo de redes afectan negativamente.
Actividad 15. Diagnóstico de supuestos
Genera el gráfico de residuos frente a los valores ajustados y el gráfico Q–Q de residuos del modelo múltiple.
# Gráfico de residuos vs valores ajustadosplot(modelo3, which =1)
# Gráfico Q-Q de los residuosplot(modelo3, which =2)
Comenta:
• ¿Se aprecia una varianza aproximadamente constante de los residuos (homocedasticidad)?
En el gráfico de Residuos vs Fitted los puntos están dispersos sin formar una figura rara ni un patrón en forma de “cono”. La nube se ve bastante pareja arriba y abajo, así que la varianza parece más o menos constante. No se ve un problema serio de heterocedasticidad.
• ¿Los residuos parecen aproximadamente normales?
En el gráfico Q–Q, los puntos siguen bastante bien la línea diagonal, solo se despegan un poquito en las colas. Eso es normal en datos reales. Por eso, los residuos se ven aproximadamente normales, y la suposición se cumple razonablemente.
Menciona posibles consecuencias si estos supuestos no se cumplieran.
Si los residuos no fueran normales o la varianza no fuera constante, las pruebas de significancia podrían ser menos confiables y algunas conclusiones del modelo podrían volverse dudosas. Pero en este caso no hay señales fuertes de problemas.
6 Regresión logística
Actividad 16. Creación de variable y descriptivos
Define una variable binaria estres_alto de la siguiente forma:
estres_alto = 1 si nivel_estres ≥ 4;
estres_alto = 0 si nivel_estres ≤ 3.
# 2. Proporción de estudiantes con estrés altoprop.table(table(datos$estres_alto))
0 1
0.695 0.305
Crea la variable estres_alto en R y verifica su distribución (por ejemplo, con table(estres_alto)).
Distribución de estres_alto\
Al crear la variable estres_alto, la distribución obtenida fue:
- 0 = 278 estudiantes
- 1 = 122 estudiantes
Esto muestra cuántos estudiantes tienen estrés bajo/moderado (0) y cuántos tienen estrés alto (1).
Calcula la proporción de estudiantes con estres_alto = 1.
La proporción resultó:
estres_alto = 0 → 0.695 (69.5%)
estres_alto = 1 → 0.305 (30.5%)
Esto significa que aproximadamente el 30.5% de los estudiantes presentan estrés alto, mientras que el 69.5% no.
Actividad 17. Modelo de regresión logística
Ajusta un modelo de regresión logística binaria para explicar la probabilidad de tener estrés alto en función de algunas variables explicativas:
Indica, antes de ver los resultados, qué signo esperas en cada coeficiente:
• Horas de estudio.
• Horas de sueño.
• Uso de redes sociales.
• Salud autopercibida.
Horas de estudio: signo positivo, porque estudiar más debería aumentar el estrés alto.
Horas de sueño: signo negativo, porque dormir más reduce el estrés.
Uso de redes sociales: signo positivo, porque más uso suele aumentar el estrés.
Salud autopercibida: signo negativo, porque mejor salud se relaciona con menos estrés.
modelo_log <-glm(estres_alto ~ horas_estudio + horas_sueno + uso_redes_horas + salud_autopercibida,data = datos, family = binomial)summary(modelo_log) # coeficientes y significancia
Call:
glm(formula = estres_alto ~ horas_estudio + horas_sueno + uso_redes_horas +
salud_autopercibida, family = binomial, data = datos)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.46801 0.93399 1.572 0.11601
horas_estudio 0.52250 0.12333 4.236 2.27e-05 ***
horas_sueno -0.44231 0.14880 -2.972 0.00295 **
uso_redes_horas 0.50167 0.09142 5.488 4.07e-08 ***
salud_autopercibida -0.88752 0.16900 -5.251 1.51e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 492.03 on 399 degrees of freedom
Residual deviance: 362.93 on 395 degrees of freedom
AIC: 372.93
Number of Fisher Scoring iterations: 5
Interpreta al menos uno de los coeficientes estimados (por ejemplo, el de salud_autopercibida) en términos de log-odds.
El coeficiente de salud_autopercibida es –0.88752, lo que significa que por cada punto adicional en salud autopercibida (es decir, sentirse más sano), los log-odds de tener estrés alto disminuyen en 0.8875.\
En pocas palabras: a mejor salud, menor probabilidad de estar en estrés alto.
Calcula los odds ratios mediante exp(coef(modelo_log)) y comenta su interpretación para uno de los predictores.
El odds ratio para salud_autopercibida es 0.4117.
Esto significa que cada punto adicional en salud autopercibida reduce los chances de tener estrés alto en un 59% aproximadamente (porque 1 – 0.4117 = 0.588).
Así, mejor salud autopercibida está fuertemente asociada con menos estrés alto.
Actividad 18. Evaluación del modelo
Obtén las probabilidades predichas del modelo con:
# 2. Clasificación usando punto de corte 0.5pred_clase <-ifelse(prob_pred >=0.5, 1, 0)# 3. Matriz de confusióntabla_confusion <-table(Predicho = pred_clase, Real = datos$estres_alto)tabla_confusion
Real
Predicho 0 1
0 252 60
1 26 62
# Proporción de clasificaciones correctasprop_correctas <-sum(diag(tabla_confusion)) /sum(tabla_confusion)prop_correctas
[1] 0.785
Ejemplo de las primeras observaciones:
0.2524
0.1556
0.4982
0.2436
0.7420
0.2859
2. Clasificación con punto de corte 0.5
Se clasificó como:
1 (estrés alto) si probabilidad ≥ 0.5
0 (no estrés alto) si probabilidad < 0.5
3. Matriz de confusión
La matriz obtenida fue:
Predicho \ Real
0
1
0
252
60
1
26
62
Proporción global de aciertos
La proporción de casos correctamente clasificados fue:
0.785
[1] 0.785
Eso equivale al 78.5% de aciertos.}
El modelo logra clasificar correctamente el 78.5% de los estudiantes, lo cual indica que sí es útil para predecir si un estudiante tendrá estrés alto, aunque todavía comete algunos errores principalmente al identificar casos de estrés alto.
7 Manipulación de datos y análisis multivariante exploratorio
Actividad 19. Manipulación de datos
library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.4.3
# Crear data frame con las probabilidades predichasdatos$prob_pred <-predict(modelo_log, type ="response")# Gráfico de probabilidad vs horas de sueñoggplot(datos, aes(x = horas_sueno, y = prob_pred)) +geom_point(alpha =0.4) +geom_smooth(method ="loess", se =FALSE, color ="blue") +labs(title ="Probabilidad predicha de estrés alto según horas de sueño",x ="Horas de sueño",y ="Probabilidad predicha") +theme_minimal()
`geom_smooth()` using formula = 'y ~ x'
Crea un subconjunto de datos llamado datos_filtrados que incluya únicamente a los estudiantes que:
• Duermen al menos 6 horas (horas_sueno ≥ 6)
• Estudian al menos 2 horas al día (horas_estudio ≥ 2)
Calcula el promedio de promedio_notas y de nivel_estres en datos_filtrados.
mean(datos_filtrados$promedio_notas)
[1] 6.586948
mean(datos_filtrados$nivel_estres)
[1] 2.976526
Compara estos promedios con los correspondientes en el conjunto total datos. Comenta alguna diferencia relevante.
Primero los promedios del total:
mean(datos$promedio_notas)
[1] 6.2277
mean(datos$nivel_estres)
[1] 2.99
En el subconjunto datos_filtrados (estudiantes que duermen ≥6 horas y estudian ≥2 horas al día), los promedios obtenidos fueron:
Promedio de notas: 6.586948
Nivel de estrés: 2.976526
En el conjunto total datos, los promedios son:
Promedio de notas: 6.2277
Nivel de estrés: 2.99
Al comparar ambos grupos, se observa que los estudiantes que duermen al menos 6 horas y estudian al menos 2 horas al día tienen un promedio de notas más alto (6.59 vs. 6.23).
En cuanto al estrés, el valor promedio es ligeramente menor (2.98 vs. 2.99), aunque la diferencia es mínima.
Esto sugiere que mantener hábitos más saludables (dormir suficiente y estudiar regularmente) se asocia con un mejor rendimiento académico, mientras que el nivel de estrés se mantiene prácticamente igual.
Actividad 20. Análisis de componentes principales (opcional / bonus)
1. Selecciona un conjunto de variables numéricas que consideres de interés, por ejemplo: horas_estudio, horas_sueno, uso_redes_horas, nivel_estres, salud_autopercibida.
2. Estandariza estas variables y obtiene los dos primeros componentes principales mediante la función prcomp.
Según los resultados, el PC1 es una combinación donde el estrés aumenta hacia un lado (carga negativa en nivel_estres) y la salud y el sueño aumentan hacia el otro (cargas positivas). Esto sugiere que el PC1 representa un eje que va de “más estrés” a “mejor salud y mayor descanso”.
En el PC2, las variables que más pesan son uso_redes_horas y horas_estudio, ambas con cargas positivas altas. Esto indica que el PC2 diferencia principalmente a quienes estudian y usan más redes sociales frente a quienes realizan menos de ambas.
Con esto, los dos componentes capturan patrones generales:
PC1 ….. estrés vs bienestar.
PC2 ….. intensidad de estudio y uso de redes.
En conclusión:
En el PC1, las variables que más aportan son nivel_estres (negativo) y salud_autopercibida y horas_sueno (positivas), así que este componente diferencia entre estudiantes con más estrés versus estudiantes con mejor salud y más sueño.
En el PC2, las cargas más altas son uso_redes_horas y horas_estudio, por lo que este componente separa a quienes estudian y usan redes más tiempo frente a quienes lo hacen menos.