library(tidyverse)
library(dplyr)
library(ggplot2)
library(gridExtra)
setwd("C:/Users/Fedep/Downloads/taller proba")
Historico_calificaciones <- read.csv("C:/Users/Fedep/Downloads/taller proba/Historico_calificaciones.csv", sep=";")
Clasifique las variables de la tabla según su tipo y escala.
ESTUDIANTE: Variable cuantitativa discreta, escala de razón. Es un identificador numérico único para cada estudiante. Aunque es número, funciona como identificador (no tiene sentido operar matemáticamente con él).
GRUPO: Variable cualitativa nominal, escala nominal. Representa el grupo al que pertenece el estudiante (A, B, C, …, I). Las categorías no tienen un orden inherente.
CARRERA: Variable cualitativa nominal, escala nominal. Indica el programa académico del estudiante. No existe un orden entre las distintas carreras.
GENERO: Variable cualitativa nominal, escala nominal. Toma valores M (Masculino) o F (Femenino). Es una variable dicotómica sin orden natural.
CALIF_FINAL: Variable cuantitativa continua, escala de razón. Representa la calificación final del estudiante en una escala de 0.0 a 5.0. Tiene un cero absoluto (0 significa ausencia de conocimiento evaluado) y permite todas las operaciones matemáticas.
Calcule estadísticos de centralidad, localización y dispersión, con el fin de realizar un completo análisis para todos los estudiantes que han visto clase con el profesor. ¿Cómo considera el desempeño de los estudiantes en estos cursos, teniendo en cuenta las estadísticas encontradas?
# Estadísticas generales para CALIF_FINAL
estadisticas_generales <- Historico_calificaciones %>%
summarise(
N = n(),
MEAN = mean(CALIF_FINAL, na.rm = TRUE),
MEDIAN = median(CALIF_FINAL, na.rm = TRUE),
SD = sd(CALIF_FINAL, na.rm = TRUE),
VAR = var(CALIF_FINAL, na.rm = TRUE),
CV = (SD / MEAN) * 100,
MIN = min(CALIF_FINAL, na.rm = TRUE),
P25 = quantile(CALIF_FINAL, 0.25, na.rm = TRUE),
P75 = quantile(CALIF_FINAL, 0.75, na.rm = TRUE),
MAX = max(CALIF_FINAL, na.rm = TRUE)
)
estadisticas_generales
## N MEAN MEDIAN SD VAR CV MIN P25 P75 MAX
## 1 250 3.5984 3.8 0.8340624 0.6956601 23.1787 0 3.2 4.175 5
Análisis del desempeño general:
El conjunto de datos cuenta con 250 estudiantes. La calificación promedio es de 3.60 sobre 5.0, lo que se ubica levemente por encima de la nota mínima aprobatoria (3.0 en la mayoría de programas). La mediana de 3.8 es superior a la media, lo que indica una leve diferencia negativa, es decir, la mayoría de los estudiantes tiende a obtener notas por encima del promedio, pero un grupo de estudiantes con notas muy bajas jala el promedio hacia abajo.
La desviación estándar de 0.83 y el coeficiente de variación (CV) de ~23.2% indican una variabilidad moderada en las calificaciones. Existe diversidad en el rendimiento académico. El rango va desde 0.0 hasta 5.0, lo que muestra que algunos estudiantes reprobaron con la mínima posible, mientras que otros alcanzaron la calificación máxima.
El P25 = 3.2 y el P75 = 4.2 indican que el 50% central de los estudiantes obtuvo calificaciones entre 3.2 y 4.2, lo cual es un rango razonable de desempeño. En general, el desempeño puede considerarse aceptable pero con oportunidad de mejora, dado que existe una proporción relevante de estudiantes con dificultades académicas.
Grafique un boxplot y un histograma para las calificaciones de todos los estudiantes y análicelo apropiadamente
# Boxplot general
p1 <- ggplot(Historico_calificaciones, aes(x = "", y = CALIF_FINAL)) +
geom_boxplot(fill = "#4C72B0", alpha = 0.7, outlier.color = "red", outlier.shape = 16) +
labs(title = "Boxplot - Calificacion Final (todos los estudiantes)",
x = "", y = "Calificacion Final") +
theme_minimal() +
theme(axis.text.x = element_blank())
# Histograma con densidad
p2 <- ggplot(Historico_calificaciones, aes(x = Historico_calificaciones$CALIF_FINAL)) +
geom_histogram(aes(y = after_stat(density)), bins = 20, fill = "#4C72B0", color = "white", alpha = 0.7) +
geom_density(color = "#C44E52", linewidth = 1.2) +
geom_vline(xintercept = mean(Historico_calificaciones$CALIF_FINAL), color = "darkblue", linetype = "dashed", linewidth = 1) +
geom_vline(xintercept = median(Historico_calificaciones$CALIF_FINAL), color = "darkred", linetype = "dotted", linewidth = 1) +
labs(title = "Histograma y Densidad - Calificacion Final",
x = "Calificacion Final", y = "Densidad") +
theme_minimal()
grid.arrange(p1, p2, ncol = 2)
## Warning: Use of `Historico_calificaciones$CALIF_FINAL` is discouraged.
## ℹ Use `CALIF_FINAL` instead.
## Use of `Historico_calificaciones$CALIF_FINAL` is discouraged.
## ℹ Use `CALIF_FINAL` instead.
Análisis de los gráficos:
El boxplot muestra que la caja central se extiende aproximadamente de 3.2 a 4.2, con la mediana alrededor de 3.8. Se observan varios valores atípicos hacia las notas bajas (inferiores a ~1.5), lo que indica la presencia de estudiantes con desempeño muy por debajo del grupo. La distribución es ligeramente asimétrica hacia la izquierda.
El histograma confirma que la mayoría de los estudiantes se concentra en el rango de 3.0 a 4.5, pero existe una tendencia importante hacia calificaciones bajas (0.0 a 2.0). La media (3.60) es menor que la mediana (3.80), lo que es consistente con dicha asimetría. La curva de densidad muestra un pico alto alrededor de 3.5–4.0.
Calcule las mismas estadísticas diferenciando por la variable Grupo. Existe alguna diferencia en las calificaciones a través de los diferentes Grupos? Que tan consistentes son las calificaciones para los 4 grupos?
# Estadísticas por grupo
calcular_estadisticas <- function(data, grupo, variable){
data %>%
group_by(!!sym(grupo)) %>%
summarise(
MEAN = mean(CALIF_FINAL),
MEDIAN = median(CALIF_FINAL),
SD = sd(CALIF_FINAL),
VAR = var(CALIF_FINAL),
CV = (SD / MEAN) * 100,
MIN = min(CALIF_FINAL),
P25 = quantile(CALIF_FINAL, 0.25),
P75 = quantile(CALIF_FINAL, 0.75),
MAX = max(CALIF_FINAL)
) %>%
ungroup()
}
estadisticas_grupo <- calcular_estadisticas(Historico_calificaciones, "GRUPO", "CALIF_FINAL")
estadisticas_grupo
## # A tibble: 9 × 10
## GRUPO MEAN MEDIAN SD VAR CV MIN P25 P75 MAX
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 A 3.32 3.4 0.772 0.596 23.3 1.7 2.7 3.85 4.6
## 2 B 3.40 3.4 0.757 0.573 22.2 1.2 3 3.85 5
## 3 C 3.74 3.8 0.545 0.297 14.6 2.5 3.4 4.12 4.9
## 4 D 3.69 3.55 0.556 0.309 15.1 2.7 3.3 4.12 4.9
## 5 E 3.68 3.85 0.636 0.404 17.3 1.9 3.38 4.03 4.3
## 6 F 3.93 3.95 0.522 0.272 13.3 3 3.6 4.2 5
## 7 G 3.93 4.2 0.840 0.706 21.4 1.1 3.95 4.4 4.8
## 8 H 3.47 3.3 0.599 0.359 17.3 2.6 2.9 3.92 4.5
## 9 I 3.35 3.8 1.53 2.34 45.7 0 2.47 4.57 5
Análisis por Grupo:
Sí existen diferencias entre grupos. Los grupos F y G presentan los promedios más altos (~3.93), mientras que los grupos A y B muestran los promedios más bajos (~3.32–3.40).
En cuanto a consistencia (medida por el CV), el Grupo I es el más inconsistente, con un CV de ~45.7% y una desviación estándar de 1.53, lo que indica una alta heterogeneidad en las calificaciones (incluso tiene la nota mínima de 0.0). En contraste, los grupos F y C son los más consistentes, con CVs de ~13.3% y ~14.6% respectivamente.
El Grupo I merece especial atención: a pesar de tener un promedio razonable (3.35), su enorme variabilidad sugiere que hay estudiantes con desempeños muy dispares (nota mínima 0.0 y máxima 5.0). Los grupos C, D y F muestran el mejor balance entre promedio y consistencia.
Realice boxplots e histogramas para la calificación final del estudiante, diferenciado por el Grupo y realice un análisis apropiado
generar_graficos <- function(data, grupo, variables) {
plots <- list()
for (var in variables) {
boxplot <- ggplot(data, aes(x = .data[[grupo]], y = .data[[var]], fill = .data[[grupo]])) +
geom_boxplot() +
labs(title = paste("Boxplot de", var, "por", grupo), x = grupo, y = var) +
theme_minimal()
histograma <- ggplot(data, aes(x = .data[[var]], fill = .data[[grupo]], color = .data[[grupo]])) +
geom_histogram(aes(y = after_stat(density)), alpha = 0.5, position = "identity", bins = 30) +
geom_density(alpha = 0.7) +
labs(title = paste("Histograma y Densidad de", var, "por", grupo), x = var, y = "Densidad") +
theme_minimal()
plots[[paste0("boxplot_", var)]] <- boxplot
plots[[paste0("histograma_", var)]] <- histograma
}
grid.arrange(grobs = plots, ncol = 2)
}
generar_graficos(Historico_calificaciones, "GRUPO", "CALIF_FINAL")
Análisis de gráficos por Grupo:
Los boxplots confirman lo observado en las estadísticas: los grupos F y G tienen medianas más altas y la caja (IQR) ubicada en valores mayores. El Grupo I es el que muestra mayor dispersión visual, con bigotes muy largos y outliers extremos en ambos extremos. Los grupos C y D presentan cajas más compactas, indicando mayor homogeneidad.
Los histogramas muestran distribuciones de forma diversa entre grupos. Mientras algunos grupos como C y F muestran distribuciones más concentradas hacia notas altas, el Grupo I tiene una distribución claramente bimodal o muy dispersa, con estudiantes tanto en notas muy bajas como muy altas. Los grupos A y B tienen distribuciones con mayor peso en notas medias-bajas.
Calcule las mismas estadísticas diferenciando por la variable Genero. Existe alguna diferencia en las calificaciones a través de los diferentes géneros? Que tan consistentes son las calificaciones en este caso?
# Estadísticas por género
estadisticas_genero <- calcular_estadisticas(Historico_calificaciones, "GENERO", "CALIF_FINAL")
estadisticas_genero
## # A tibble: 2 × 10
## GENERO MEAN MEDIAN SD VAR CV MIN P25 P75 MAX
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 F 3.59 3.7 0.934 0.872 26.0 0.5 3.1 4.3 5
## 2 M 3.60 3.8 0.785 0.616 21.8 0 3.2 4.1 5
Análisis por Género:
Las diferencias entre géneros son muy pequeñas y probablemente no significativas desde el punto de vista estadístico. Los hombres (M) tienen una media de 3.60 frente a 3.59 de las mujeres (F), una diferencia prácticamente nula.
Sin embargo, sí hay una diferencia en la consistencia: los hombres presentan un CV de ~21.8% frente a ~26.0% de las mujeres, lo que indica que las calificaciones de los hombres son levemente más homogéneas. Las mujeres tienen mayor dispersión (SD = 0.93 vs 0.79) y su nota mínima es 0.5 frente a 0.0 en hombres. Ambos géneros alcanzan la nota máxima de 5.0.
En conclusión, no existe una diferencia relevante en el desempeño académico entre géneros en los cursos del profesor.
Realice boxplots e histogramas para la calificación final del estudiante, diferenciado por el Genero y realice un análisis apropiado
generar_graficos(Historico_calificaciones, "GENERO", "CALIF_FINAL")
Análisis de gráficos por Género:
Los boxplots muestran cajas muy similares entre géneros: mismas medianas aproximadas (~3.7–3.8), rangos intercuartílicos parecidos (aprox. 3.1–4.2). Las mujeres presentan ligeramente más valores atípicos en la parte baja de la distribución, lo que explica su mayor dispersión. Ambas distribuciones son mayormente simétricas.
Los histogramas refuerzan la similitud entre géneros: ambas distribuciones tienen forma similar con pico en el rango 3.5–4.0. Se evidencia que el género no es un factor diferenciador relevante en el desempeño académico de estos estudiantes debido a la similitud en los datos.
Calcule tablas de frecuencia para las variables de Calificaciones (utilizando \(k=5\)) y de género usando la función que se encuentra a continuación:
tablaFrecuencias <- function(x, k = NULL, incluirExtremos = TRUE) {
# Validación inicial de datos
if (is.null(x)) {
stop("El vector de datos no puede estar vacío")
}
# Determinar si la variable es numérica o categórica
if (is.numeric(x)) {
# Manejo de variables numéricas
if (is.null(k)) {
k <- min(ceiling(sqrt(length(x))), 10) # Regla de Sturges simplificada
}
# Crear intervalos
cortes <- cut(x, breaks = k, right = FALSE, include.lowest = incluirExtremos)
limites <- seq(min(x), max(x), length.out = length(unique(cortes)) + 1)
# Calcular marca de clase
marcaClase <- (limites[1:(length(limites)-1)] + limites[2:length(limites)]) / 2
# Calcular frecuencias
intervalos <- levels(cortes)
frecAbsoluta <- as.vector(table(cortes))
frecRelativa <- round(frecAbsoluta / length(x), 4)
frecAcumulada <- cumsum(frecAbsoluta)
frecRelAcumulada <- cumsum(frecRelativa)
# Crear tabla de resultados
tabla <- data.frame(
Intervalo = intervalos,
MarcaClase = marcaClase,
FrecuenciaAbsoluta = frecAbsoluta,
FrecuenciaRelativa = frecRelativa,
FrecuenciaAcumulada = frecAcumulada,
FrecuenciaRelAcumulada = frecRelAcumulada
)
} else {
# Manejo de variables categóricas
frecAbsoluta <- table(x)
frecRelativa <- round(prop.table(frecAbsoluta), 4)
frecAcumulada <- cumsum(frecAbsoluta)
frecRelAcumulada <- cumsum(frecRelativa)
# Crear tabla de resultados
tabla <- data.frame(
Categoria = names(frecAbsoluta),
FrecuenciaAbsoluta = as.vector(frecAbsoluta),
FrecuenciaRelativa = as.vector(frecRelativa),
FrecuenciaAcumulada = frecAcumulada,
FrecuenciaRelAcumulada = frecRelAcumulada
)
}
return(tabla)
}
# Tabla de frecuencias para CALIF_FINAL con k = 5
cat("=== Tabla de Frecuencias: CALIF_FINAL (k=5) ===\n")
## === Tabla de Frecuencias: CALIF_FINAL (k=5) ===
tabla_calificaciones <- tablaFrecuencias(Historico_calificaciones$CALIF_FINAL, k = 5)
tabla_calificaciones
## Intervalo MarcaClase FrecuenciaAbsoluta FrecuenciaRelativa
## 1 [-0.005,1) 0.5 3 0.012
## 2 [1,2) 1.5 8 0.032
## 3 [2,3) 2.5 34 0.136
## 4 [3,4) 3.5 114 0.456
## 5 [4,5] 4.5 91 0.364
## FrecuenciaAcumulada FrecuenciaRelAcumulada
## 1 3 0.012
## 2 11 0.044
## 3 45 0.180
## 4 159 0.636
## 5 250 1.000
# Tabla de frecuencias para GENERO (variable categórica)
cat("\n=== Tabla de Frecuencias: GENERO ===\n")
##
## === Tabla de Frecuencias: GENERO ===
tabla_genero <- tablaFrecuencias(Historico_calificaciones$GENERO)
tabla_genero
## Categoria FrecuenciaAbsoluta FrecuenciaRelativa FrecuenciaAcumulada
## F F 81 0.324 81
## M M 169 0.676 250
## FrecuenciaRelAcumulada
## F 0.324
## M 1.000
Análisis de las tablas de frecuencia:
Tabla de Calificaciones (k=5):
La distribución de las calificaciones muestra que el
45.6% de los estudiantes obtuvo una calificación en el
intervalo [3.0, 4.0), y el 36.4% en el intervalo [4.0,
5.0]. Esto significa que más del 82% de los estudiantes
aprobó con notas de 3.0 o superior. Sin embargo, existe un
18% de estudiantes en los intervalos inferiores a 3.0
(incluyendo reprobados), lo que es una proporción significativa a tener
en cuenta. Solo el 4.4% de los estudiantes presenta
calificaciones por debajo de 2.0, y el 1.2% por debajo
de 1.0.
El mayor intervalo de concentración es [3.0, 4.0), que agrupa más de la mitad de los datos (114 estudiantes), seguido por [4.0, 5.0] con 91 estudiantes.
Tabla de Género:
La muestra está compuesta por 169 hombres (67.6%) y
81 mujeres (32.4%). Hay un sesgo importante hacia el
género masculino, lo que puede estar relacionado con las carreras
predominantes (Ingeniería Informática e Industrial concentran la mayoría
del alumnado).
Conclusiones sobre el desempeño de los estudiantes:
Desempeño general aceptable pero heterogéneo: La media de 3.60 y la mediana de 3.80 indican un desempeño general aceptable. Sin embargo, el CV de 23.2% y la presencia de outliers en notas bajas señalan una heterogeneidad importante en el grupo de estudiantes.
Mayoría supera la nota mínima aprobatoria: Más del 82% de los estudiantes obtiene calificaciones iguales o superiores a 3.0. No obstante, existe un 18% con dificultades para aprobar, lo que merece atención.
Diferencias entre grupos, no entre géneros: Los grupos F, G, C y D muestran mejor desempeño y mayor consistencia, mientras que los grupos A, B e I presentan promedios más bajos y/o mayor variabilidad. El género no es un factor diferenciador relevante en el rendimiento.
Grupo I es el más preocupante: Con la mayor variabilidad (CV ~46%) y la nota mínima de 0.0, este grupo parece tener la mayor brecha de desempeño entre sus estudiantes.
Recomendaciones:
Para los estudiantes: - Identificar y aprovechar los recursos de apoyo académico desde las primeras semanas del curso, especialmente quienes presentan dificultades en los primeros parciales. - Formar grupos de estudio intercursos para compartir estrategias de aprendizaje entre grupos con mejores resultados (F, G) y los que presentan más dificultades (A, B). - Mantener constancia a lo largo del semestre, ya que la alta dispersión sugiere que algunos estudiantes empiezan bien pero terminan con resultados bajos.
Para el docente: - Investigar las causas de la alta variabilidad en el Grupo I, ya que podría indicar diferencias en la metodología de enseñanza, el perfil de los estudiantes o el semestre en que se dictó el curso. - Implementar estrategias de intervención temprana para identificar estudiantes en riesgo de reprobar, aprovechando el histórico de calificaciones. - Revisar si los grupos con mejor desempeño (F, G) comparten características comunes (carrera, semestre, metodología) que puedan replicarse en otros grupos. - Considerar la posibilidad de nivelar el contenido o la evaluación entre grupos para reducir las diferencias observadas, garantizando condiciones equitativas de aprendizaje.