library(readr)
datos <- read_csv2("data/ACT122.csv")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 759 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (2): level_attendance, level_internet
## dbl (6): hours_studied, previous_score, attendance, sleep_hours, internet_us...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
summary(datos)
## hours_studied previous_score attendance level_attendance
## Min. : 0.024 Min. : 20.89 Min. : 54.80 Length :759
## 1st Qu.: 3.100 1st Qu.: 56.55 1st Qu.: 78.72 N.unique : 3
## Median : 4.116 Median : 66.56 Median : 85.24 N.blank : 0
## Mean : 4.249 Mean : 66.83 Mean : 85.44 Min.nchar: 4
## 3rd Qu.: 5.056 3rd Qu.: 76.62 3rd Qu.: 91.80 Max.nchar: 5
## Max. :19.886 Max. :134.08 Max. :124.26
## sleep_hours internet_usage level_internet final_score
## Min. : 4.093 Min. : 0.088 Length :759 Min. : 4.408
## 1st Qu.: 6.279 1st Qu.: 2.220 N.unique : 3 1st Qu.: 81.523
## Median : 7.030 Median : 3.015 N.blank : 0 Median : 90.728
## Mean : 7.008 Mean : 3.194 Min.nchar: 4 Mean : 88.516
## 3rd Qu.: 7.712 3rd Qu.: 3.804 Max.nchar: 5 3rd Qu.: 99.996
## Max. :10.243 Max. :29.062 Max. :100.000
library(DT)
# Cargar los datos
library(readr)
datos <- read_csv2("data/ACT122.csv")
## ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 759 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (2): level_attendance, level_internet
## dbl (6): hours_studied, previous_score, attendance, sleep_hours, internet_us...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
DT::datatable(
head(datos),
fillContainer = FALSE,
options = list(pageLength = 8)
)
library(dplyr)
##
## 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
tabla_nivel_asistencia <- datos %>%
count(level_attendance, name = "Frecuencia") %>%
mutate(`Frecuencia relativa` = round(Frecuencia / sum(Frecuencia), 4)) %>%
arrange(factor(level_attendance, levels = c("Baja", "Media", "Alta")))
tabla_nivel_asistencia
## # A tibble: 3 × 3
## level_attendance Frecuencia `Frecuencia relativa`
## <chr> <int> <dbl>
## 1 Baja 3 0.004
## 2 Media 222 0.292
## 3 Alta 534 0.704
tabla_nivel_internet <- datos %>%
count(level_internet, name = "Frecuencia") %>%
mutate(`Frecuencia relativa` = round(Frecuencia / sum(Frecuencia), 4)) %>%
arrange(factor(level_internet, levels = c("Baja", "Media", "Alta")))
tabla_nivel_internet
## # A tibble: 3 × 3
## level_internet Frecuencia `Frecuencia relativa`
## <chr> <int> <dbl>
## 1 Baja 151 0.199
## 2 Media 574 0.756
## 3 Alta 34 0.0448
# Indicadores de variables cuantitativas
library(summarytools)
library(dplyr)
indicadores_cuantitativos <- datos %>%
select(hours_studied, previous_score,attendance, sleep_hours,internet_usage, final_score) %>%
descr()
indicadores_cuantitativos
## Descriptive Statistics
## datos
## N: 759
##
## attendance final_score hours_studied internet_usage previous_score
## ----------------- ------------ ------------- --------------- ---------------- ----------------
## Mean 85.44 88.52 4.25 3.19 66.83
## Std.Dev 9.86 11.57 1.98 2.10 15.70
## Min 54.80 4.41 0.02 0.09 20.89
## Q1 78.71 81.51 3.10 2.22 56.54
## Median 85.24 90.73 4.12 3.02 66.56
## Q3 91.80 100.00 5.06 3.81 76.67
## Max 124.26 100.00 19.89 29.06 134.08
## MAD 9.71 13.72 1.45 1.17 14.87
## IQR 13.07 18.47 1.96 1.58 20.07
## CV 0.12 0.13 0.47 0.66 0.23
## Skewness 0.11 -1.35 2.61 5.67 0.12
## SE.Skewness 0.09 0.09 0.09 0.09 0.09
## Kurtosis 0.11 3.74 15.20 50.33 0.53
## N.Valid 759.00 759.00 759.00 759.00 759.00
## N 759.00 759.00 759.00 759.00 759.00
## Pct.Valid 100.00 100.00 100.00 100.00 100.00
##
## Table: Table continues below
##
##
##
## sleep_hours
## ----------------- -------------
## Mean 7.01
## Std.Dev 1.03
## Min 4.09
## Q1 6.28
## Median 7.03
## Q3 7.71
## Max 10.24
## MAD 1.08
## IQR 1.43
## CV 0.15
## Skewness -0.01
## SE.Skewness 0.09
## Kurtosis -0.24
## N.Valid 759.00
## N 759.00
## Pct.Valid 100.00
# Comparación por nivel de asistencia
comparacion_asistencia <- datos %>%
group_by(level_attendance) %>%
summarise(
horas_estudio_media = round(mean(hours_studied), 2),
horas_estudio_mediana = round(median(hours_studied), 2),
puntaje_previo_media = round(mean(previous_score), 2),
puntaje_previo_mediana = round(median(previous_score), 2),
horas_sueno_media = round(mean(sleep_hours), 2),
uso_internet_media = round(mean(internet_usage), 2),
puntaje_final_media = round(mean(final_score), 2),
puntaje_final_mediana = round(median(final_score), 2)
)
comparacion_asistencia
## # A tibble: 3 × 9
## level_attendance horas_estudio_media horas_estudio_mediana
## <chr> <dbl> <dbl>
## 1 Alta 4.33 4.14
## 2 Baja 4.29 4.67
## 3 Media 4.06 4.01
## # ℹ 6 more variables: puntaje_previo_media <dbl>, puntaje_previo_mediana <dbl>,
## # horas_sueno_media <dbl>, uso_internet_media <dbl>,
## # puntaje_final_media <dbl>, puntaje_final_mediana <dbl>
tabla_nivel_asistencia %>%
slice_max(Frecuencia, n = 1)
## # A tibble: 1 × 3
## level_attendance Frecuencia `Frecuencia relativa`
## <chr> <int> <dbl>
## 1 Alta 534 0.704
# Comparación por nivel de uso de internet
comparacion_internet <- datos %>%
group_by(level_internet) %>%
summarise(
horas_estudio_media = round(mean(hours_studied), 2),
horas_estudio_mediana = round(median(hours_studied), 2),
puntaje_previo_media = round(mean(previous_score), 2),
puntaje_previo_mediana = round(median(previous_score), 2),
horas_sueno_media = round(mean(sleep_hours), 2),
horas_sueno_mediana = round(median(sleep_hours), 2),
puntaje_final_media = round(mean(final_score), 2),
puntaje_final_mediana = round(median(final_score), 2)
)
comparacion_internet
## # A tibble: 3 × 9
## level_internet horas_estudio_media horas_estudio_mediana puntaje_previo_media
## <chr> <dbl> <dbl> <dbl>
## 1 Alta 4.45 4.22 64.8
## 2 Baja 4.3 4.18 67.6
## 3 Media 4.22 4.1 66.8
## # ℹ 5 more variables: puntaje_previo_mediana <dbl>, horas_sueno_media <dbl>,
## # horas_sueno_mediana <dbl>, puntaje_final_media <dbl>,
## # puntaje_final_mediana <dbl>
tabla_nivel_internet %>%
slice_max(Frecuencia, n = 1)
## # A tibble: 1 × 3
## level_internet Frecuencia `Frecuencia relativa`
## <chr> <int> <dbl>
## 1 Media 574 0.756
# Tabla de frecuencias: puntaje final
tabla_puntaje_final <- datos %>%
mutate(intervalo = cut(
final_score,
breaks = 3,
include.lowest = TRUE
)) %>%
count(intervalo, name = "Frecuencia") %>%
mutate(
`Frecuencia relativa` = round(Frecuencia / sum(Frecuencia), 5)
)
tabla_puntaje_final
## # A tibble: 3 × 3
## intervalo Frecuencia `Frecuencia relativa`
## <fct> <int> <dbl>
## 1 [4.31,36.3] 1 0.00132
## 2 (36.3,68.1] 43 0.0566
## 3 (68.1,100] 715 0.942
En cuanto al nivel de asistencia, la categoría más frecuente (moda) es “Alta”, con el 70,4 % de los casos (534 de 759 estudiantes). Le sigue la categoría “Media”, con el 29,2 %, y por último “Baja”, con el 0,4 %. En el nivel de uso de internet, la categoría más frecuente es “Media”, con el 75,6 % de los casos, mientras que “Baja” representa el 19,9 % y “Alta” el 4,5 %. En general, se puede observar que la mayoría de los estudiantes tiene una asistencia alta y un uso de internet principalmente moderado.
Al observar los valores de asimetría (Skewness), se encuentran diferencias entre las variables. internet_usage presenta una asimetría positiva bastante alta (5,67) y hours_studied también presenta una asimetría positiva (2,61). Esto significa que en estas variables hay algunos estudiantes con valores mucho más altos que la mayoría. Por ejemplo, en hours_studied el valor máximo es de 19,89 horas, mientras que la mediana es de 4,12 horas. Debido a esta diferencia, la mediana puede representar mejor el comportamiento de los datos que la media en estas variables.
Por otro lado, final_score presenta una asimetría negativa de -1,35, lo que indica que la mayoría de los puntajes se encuentran en valores altos y que hay algunos puntajes más bajos que hacen que la distribución se extienda hacia la izquierda. Las variables attendance, previous_score y sleep_hours tienen valores de asimetría cercanos a cero (0,11, 0,12 y -0,01, respectivamente), por lo que sus distribuciones son aproximadamente simétricas. En estos casos, la media y la mediana tienen valores más cercanos y permiten representar mejor los datos.
Al comparar las horas de estudio según el nivel de asistencia, se observa que el grupo con asistencia “Baja” tiene la mediana más alta de horas estudiadas (4,67 horas), seguido por el grupo “Alta” (4,14 horas) y el grupo “Media” (4,01 horas). Sin embargo, este resultado debe tomarse con cuidado, ya que el grupo de asistencia baja representa solamente el 0,4 % de los estudiantes. Por esta razón, no sería correcto concluir que los estudiantes que asisten menos estudian más. Lo que sí se puede decir es que, dentro de esta base de datos, el pequeño grupo con asistencia baja presentó una mediana de horas de estudio mayor.
En cuanto al nivel de uso de internet, el grupo “Bajo” presentó el puntaje previo promedio más alto (67,6), seguido del grupo “Media” (66,8) y del grupo “Alta” (64,8). Esto muestra que, en los datos analizados, los estudiantes con mayor uso de internet no fueron quienes tuvieron el puntaje previo promedio más alto. Sin embargo, estos resultados son solamente descriptivos y no permiten afirmar que el uso de internet cause un aumento o disminución en el rendimiento académico.
Se encontró que la variable attendance tiene un valor máximo de 124,26, aunque si se interpreta como un porcentaje de asistencia, normalmente debería estar entre 0 y 100 %. Por lo tanto, este valor es una característica particular de la base de datos. Se decidió mantener el dato tal como aparece originalmente y mencionarlo como una observación dentro del análisis.
En conclusión, el análisis de las 759 observaciones permitió conocer algunas características relacionadas con la preparación académica, la asistencia y el uso de internet antes de un examen. En las variables cualitativas, la mayoría de los estudiantes presentó un nivel de asistencia “Alto” (70,4 %), mientras que el nivel de uso de internet más frecuente fue “Medio” (75,6 %). En las variables cuantitativas se encontraron diferentes comportamientos en las distribuciones. Las horas estudiadas tuvieron una media de 4,25 horas y una asimetría positiva marcada, mientras que el puntaje final tuvo una media de 88,52 puntos y una asimetría negativa, mostrando una mayor concentración de los resultados en puntajes altos. Las comparaciones también permitieron observar variaciones en las horas de estudio y en los puntajes según los niveles de asistencia y uso de internet. Sin embargo, como se trata de un análisis descriptivo, estos resultados no permiten establecer que una determinada conducta sea la causa de un mejor o peor rendimiento. En general, las tablas de frecuencia y los diferentes indicadores estadísticos permitieron organizar y comprender mejor el comportamiento de las variables de la base de datos.