setwd(“SABER 11/Saber_11__2019-2_20240824.csv”)

install.packages("tidyverse")
## Installing package into 'C:/Users/USER/AppData/Local/R/win-library/4.4'
## (as 'lib' is unspecified)
## package 'tidyverse' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\USER\AppData\Local\Temp\RtmpyOFv2p\downloaded_packages
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
install.packages("tidyverse")
## Warning: package 'tidyverse' is in use and will not be installed
library(tidyverse)
datos <- read_csv("SABER 11/Saber_11__2019-2_20240824.csv")
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
##   dat <- vroom(...)
##   problems(dat)
## Rows: 546212 Columns: 82
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (61): ESTU_TIPODOCUMENTO, ESTU_NACIONALIDAD, ESTU_GENERO, ESTU_FECHANACI...
## dbl (21): PERIODO, COLE_COD_DANE_ESTABLECIMIENTO, COLE_COD_DANE_SEDE, PUNT_L...
## 
## ℹ 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.
str(datos)
## spc_tbl_ [546,212 × 82] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ ESTU_TIPODOCUMENTO           : chr [1:546212] "TI" "TI" "TI" "TI" ...
##  $ ESTU_NACIONALIDAD            : chr [1:546212] "COLOMBIA" "COLOMBIA" "COLOMBIA" "COLOMBIA" ...
##  $ ESTU_GENERO                  : chr [1:546212] "M" "M" "M" "M" ...
##  $ ESTU_FECHANACIMIENTO         : chr [1:546212] "02/18/2002 12:00:00 AM" "06/28/2003 12:00:00 AM" "06/02/2001 12:00:00 AM" "04/26/2002 12:00:00 AM" ...
##  $ PERIODO                      : num [1:546212] 20194 20194 20194 20194 20194 ...
##  $ ESTU_CONSECUTIVO             : chr [1:546212] "SB11201940031558" "SB11201940303339" "SB11201940255017" "SB11201940154799" ...
##  $ ESTU_ESTUDIANTE              : chr [1:546212] "ESTUDIANTE" "ESTUDIANTE" "ESTUDIANTE" "ESTUDIANTE" ...
##  $ ESTU_TIENEETNIA              : chr [1:546212] "No" "No" "No" "Si" ...
##  $ ESTU_PAIS_RESIDE             : chr [1:546212] "COLOMBIA" "COLOMBIA" "COLOMBIA" "COLOMBIA" ...
##  $ ESTU_ETNIA                   : chr [1:546212] "-" "-" "-" "Ninguno" ...
##  $ ESTU_DEPTO_RESIDE            : chr [1:546212] "MAGDALENA" "BOGOTÁ" "BOLIVAR" "BOGOTÁ" ...
##  $ ESTU_COD_RESIDE_DEPTO        : chr [1:546212] "47" "11" "13" "11" ...
##  $ ESTU_MCPIO_RESIDE            : chr [1:546212] "SANTA ANA" "BOGOTÁ D.C." "CARTAGENA DE INDIAS" "BOGOTÁ D.C." ...
##  $ ESTU_COD_RESIDE_MCPIO        : chr [1:546212] "47707" "11001" "13001" "11001" ...
##  $ FAMI_ESTRATOVIVIENDA         : chr [1:546212] "Estrato 3" "Estrato 3" "Estrato 1" "Estrato 3" ...
##  $ FAMI_PERSONASHOGAR           : chr [1:546212] "5 a 6" "9 o más" "5 a 6" "3 a 4" ...
##  $ FAMI_CUARTOSHOGAR            : chr [1:546212] "Cinco" "Tres" "Dos" "Dos" ...
##  $ FAMI_EDUCACIONPADRE          : chr [1:546212] "Educación profesional completa" "Técnica o tecnológica completa" "Secundaria (Bachillerato) completa" "Primaria incompleta" ...
##  $ FAMI_EDUCACIONMADRE          : chr [1:546212] "Secundaria (Bachillerato) completa" "Técnica o tecnológica completa" "Secundaria (Bachillerato) completa" "Secundaria (Bachillerato) completa" ...
##  $ FAMI_TRABAJOLABORPADRE       : chr [1:546212] "No aplica" "Trabaja por cuenta propia (por ejemplo plomero, electricista)" "Es vendedor o trabaja en atención al público" "No aplica" ...
##  $ FAMI_TRABAJOLABORMADRE       : chr [1:546212] "Trabaja en el hogar, no trabaja o estudia" "Es dueño de un negocio pequeño (tiene pocos empleados o no tiene, por ejemplo tienda, papelería, etc" "Es vendedor o trabaja en atención al público" "Es dueño de un negocio pequeño (tiene pocos empleados o no tiene, por ejemplo tienda, papelería, etc" ...
##  $ FAMI_TIENEINTERNET           : chr [1:546212] "Si" "Si" "No" "No" ...
##  $ FAMI_TIENESERVICIOTV         : chr [1:546212] "Si" "Si" "Si" "No" ...
##  $ FAMI_TIENECOMPUTADOR         : chr [1:546212] "No" "Si" "No" "Si" ...
##  $ FAMI_TIENELAVADORA           : chr [1:546212] "Si" "Si" "Si" "No" ...
##  $ FAMI_TIENEHORNOMICROOGAS     : chr [1:546212] "Si" "Si" "No" "No" ...
##  $ FAMI_TIENEAUTOMOVIL          : chr [1:546212] "No" "Si" "No" "No" ...
##  $ FAMI_TIENEMOTOCICLETA        : chr [1:546212] "No" "No" "No" "No" ...
##  $ FAMI_TIENECONSOLAVIDEOJUEGOS : chr [1:546212] "No" "No" "No" "No" ...
##  $ FAMI_NUMLIBROS               : chr [1:546212] "MÁS DE 100 LIBROS" "MÁS DE 100 LIBROS" "26 A 100 LIBROS" "11 A 25 LIBROS" ...
##  $ FAMI_COMELECHEDERIVADOS      : chr [1:546212] "1 o 2 veces por semana" "Todos o casi todos los días" "Todos o casi todos los días" "Todos o casi todos los días" ...
##  $ FAMI_COMECARNEPESCADOHUEVO   : chr [1:546212] "3 a 5 veces por semana" "3 a 5 veces por semana" "Todos o casi todos los días" "Todos o casi todos los días" ...
##  $ FAMI_COMECEREALFRUTOSLEGUMBRE: chr [1:546212] "Nunca o rara vez comemos eso" "1 o 2 veces por semana" "3 a 5 veces por semana" "3 a 5 veces por semana" ...
##  $ FAMI_SITUACIONECONOMICA      : chr [1:546212] "Peor" "Mejor" "Igual" "Igual" ...
##  $ ESTU_DEDICACIONLECTURADIARIA : chr [1:546212] "Entre 30 y 60 minutos" "Entre 30 y 60 minutos" "Entre 30 y 60 minutos" "30 minutos o menos" ...
##  $ ESTU_DEDICACIONINTERNET      : chr [1:546212] "Entre 30 y 60 minutos" "Entre 30 y 60 minutos" "Más de 3 horas" "Entre 30 y 60 minutos" ...
##  $ ESTU_HORASSEMANATRABAJA      : chr [1:546212] "Menos de 10 horas" "Menos de 10 horas" "0" "Más de 30 horas" ...
##  $ ESTU_TIPOREMUNERACION        : chr [1:546212] "Si, en efectivo" "Si, en efectivo" "Si, en efectivo" "Si, en efectivo" ...
##  $ COLE_CODIGO_ICFES            : chr [1:546212] "039008" "128611" "035493" "138032" ...
##  $ COLE_COD_DANE_ESTABLECIMIENTO: num [1:546212] 1.48e+11 3.11e+11 1.13e+11 1.11e+11 1.11e+11 ...
##  $ COLE_NOMBRE_ESTABLECIMIENTO  : chr [1:546212] "INSTITUCION EDUCATIVA DEPARTAMENTAL ANTONIO BRUJES CARMONA" "GIMN SAN ANGELO" "INSTITUCION EDUCATIVA PROMOCION SOCIAL DE C/GENA." "COLEGIO VIRGINIA GUTIERREZ DE PINEDA (IED)" ...
##  $ COLE_GENERO                  : chr [1:546212] "MIXTO" "MIXTO" "MIXTO" "MIXTO" ...
##  $ COLE_NATURALEZA              : chr [1:546212] "OFICIAL" "NO OFICIAL" "OFICIAL" "OFICIAL" ...
##  $ COLE_CALENDARIO              : chr [1:546212] "A" "A" "A" "A" ...
##  $ COLE_BILINGUE                : chr [1:546212] "N" "-" "N" "-" ...
##  $ COLE_CARACTER                : chr [1:546212] "TÉCNICO/ACADÉMICO" "ACADÉMICO" "TÉCNICO/ACADÉMICO" "ACADÉMICO" ...
##  $ COLE_COD_DANE_SEDE           : num [1:546212] 1.48e+11 3.11e+11 1.13e+11 1.11e+11 1.11e+11 ...
##  $ COLE_NOMBRE_SEDE             : chr [1:546212] "COL DPTAL ANTONIO BRUGES CARMONA" "GIMN SAN ANGELO" "INSTITUCION EDUCATIVA PROMOCION SOCIAL DE C/GENA." "COL VIRGINIA GUTIERREZ DE PINEDA (INS EDUC DIST)" ...
##  $ COLE_SEDE_PRINCIPAL          : chr [1:546212] "S" "S" "S" "S" ...
##  $ COLE_AREA_UBICACION          : chr [1:546212] "URBANO" "URBANO" "URBANO" "URBANO" ...
##  $ COLE_JORNADA                 : chr [1:546212] "MAÑANA" "COMPLETA" "MAÑANA" "MAÑANA" ...
##  $ COLE_COD_MCPIO_UBICACION     : chr [1:546212] "47707" "11001" "13001" "11001" ...
##  $ COLE_MCPIO_UBICACION         : chr [1:546212] "SANTA ANA" "BOGOTÁ D.C." "CARTAGENA DE INDIAS" "BOGOTÁ D.C." ...
##  $ COLE_COD_DEPTO_UBICACION     : chr [1:546212] "47" "11" "13" "11" ...
##  $ COLE_DEPTO_UBICACION         : chr [1:546212] "MAGDALENA" "BOGOTÁ" "BOLIVAR" "BOGOTÁ" ...
##  $ ESTU_PRIVADO_LIBERTAD        : chr [1:546212] "N" "N" "N" "N" ...
##  $ ESTU_COD_MCPIO_PRESENTACION  : chr [1:546212] "47707" "11001" "13001" "11001" ...
##  $ ESTU_MCPIO_PRESENTACION      : chr [1:546212] "SANTA ANA" "BOGOTÁ D.C." "CARTAGENA DE INDIAS" "BOGOTÁ D.C." ...
##  $ ESTU_DEPTO_PRESENTACION      : chr [1:546212] "MAGDALENA" "BOGOTÁ" "BOLIVAR" "BOGOTÁ" ...
##  $ ESTU_COD_DEPTO_PRESENTACION  : chr [1:546212] "47" "11" "13" "11" ...
##  $ PUNT_LECTURA_CRITICA         : num [1:546212] 47 60 66 62 63 49 76 57 62 68 ...
##  $ PERCENTIL_LECTURA_CRITICA    : num [1:546212] 33 76 91 81 85 37 100 67 83 94 ...
##  $ DESEMP_LECTURA_CRITICA       : num [1:546212] 2 3 4 3 3 2 4 3 3 4 ...
##  $ PUNT_MATEMATICAS             : num [1:546212] 48 65 57 54 57 29 70 65 62 66 ...
##  $ PERCENTIL_MATEMATICAS        : num [1:546212] 42 88 70 60 70 4 96 88 82 91 ...
##  $ DESEMP_MATEMATICAS           : num [1:546212] 2 3 3 3 3 1 3 3 3 3 ...
##  $ PUNT_C_NATURALES             : num [1:546212] 37 54 41 61 55 41 70 63 66 63 ...
##  $ PERCENTIL_C_NATURALES        : num [1:546212] 15 71 29 87 74 26 98 90 95 91 ...
##  $ DESEMP_C_NATURALES           : num [1:546212] 1 2 2 3 2 2 3 3 3 3 ...
##  $ PUNT_SOCIALES_CIUDADANAS     : num [1:546212] 30 59 74 73 57 41 68 66 39 77 ...
##  $ PERCENTIL_SOCIALES_CIUDADANAS: num [1:546212] 8 83 99 99 79 39 96 95 33 100 ...
##  $ DESEMP_SOCIALES_CIUDADANAS   : num [1:546212] 1 3 4 4 3 2 3 3 1 4 ...
##  $ PUNT_INGLES                  : num [1:546212] 54 63 64 53 52 35 72 60 63 51 ...
##  $ PERCENTIL_INGLES             : num [1:546212] 67 88 89 67 63 14 96 83 88 61 ...
##  $ DESEMP_INGLES                : chr [1:546212] "A1" "A2" "A2" "A1" ...
##  $ PUNT_GLOBAL                  : num [1:546212] 208 299 299 309 288 198 355 313 288 336 ...
##  $ PERCENTIL_GLOBAL             : num [1:546212] 25 83 84 88 78 19 99 89 78 95 ...
##  $ ESTU_INSE_INDIVIDUAL         : chr [1:546212] "50.9421557404314" "59.767864431576" "50.7642383644749" "45.7791353123516" ...
##  $ ESTU_NSE_INDIVIDUAL          : num [1:546212] 2 3 2 2 3 2 4 3 3 3 ...
##  $ ESTU_NSE_ESTABLECIMIENTO     : num [1:546212] 2 4 3 3 3 2 3 3 2 3 ...
##  $ ESTU_ESTADOINVESTIGACION     : chr [1:546212] "PUBLICAR" "PUBLICAR" "PUBLICAR" "PUBLICAR" ...
##  $ ESTU_GENERACION-E            : chr [1:546212] "NO" "NO" "GENERACION E - GRATUIDAD" "GENERACION E - GRATUIDAD" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ESTU_TIPODOCUMENTO = col_character(),
##   ..   ESTU_NACIONALIDAD = col_character(),
##   ..   ESTU_GENERO = col_character(),
##   ..   ESTU_FECHANACIMIENTO = col_character(),
##   ..   PERIODO = col_double(),
##   ..   ESTU_CONSECUTIVO = col_character(),
##   ..   ESTU_ESTUDIANTE = col_character(),
##   ..   ESTU_TIENEETNIA = col_character(),
##   ..   ESTU_PAIS_RESIDE = col_character(),
##   ..   ESTU_ETNIA = col_character(),
##   ..   ESTU_DEPTO_RESIDE = col_character(),
##   ..   ESTU_COD_RESIDE_DEPTO = col_character(),
##   ..   ESTU_MCPIO_RESIDE = col_character(),
##   ..   ESTU_COD_RESIDE_MCPIO = col_character(),
##   ..   FAMI_ESTRATOVIVIENDA = col_character(),
##   ..   FAMI_PERSONASHOGAR = col_character(),
##   ..   FAMI_CUARTOSHOGAR = col_character(),
##   ..   FAMI_EDUCACIONPADRE = col_character(),
##   ..   FAMI_EDUCACIONMADRE = col_character(),
##   ..   FAMI_TRABAJOLABORPADRE = col_character(),
##   ..   FAMI_TRABAJOLABORMADRE = col_character(),
##   ..   FAMI_TIENEINTERNET = col_character(),
##   ..   FAMI_TIENESERVICIOTV = col_character(),
##   ..   FAMI_TIENECOMPUTADOR = col_character(),
##   ..   FAMI_TIENELAVADORA = col_character(),
##   ..   FAMI_TIENEHORNOMICROOGAS = col_character(),
##   ..   FAMI_TIENEAUTOMOVIL = col_character(),
##   ..   FAMI_TIENEMOTOCICLETA = col_character(),
##   ..   FAMI_TIENECONSOLAVIDEOJUEGOS = col_character(),
##   ..   FAMI_NUMLIBROS = col_character(),
##   ..   FAMI_COMELECHEDERIVADOS = col_character(),
##   ..   FAMI_COMECARNEPESCADOHUEVO = col_character(),
##   ..   FAMI_COMECEREALFRUTOSLEGUMBRE = col_character(),
##   ..   FAMI_SITUACIONECONOMICA = col_character(),
##   ..   ESTU_DEDICACIONLECTURADIARIA = col_character(),
##   ..   ESTU_DEDICACIONINTERNET = col_character(),
##   ..   ESTU_HORASSEMANATRABAJA = col_character(),
##   ..   ESTU_TIPOREMUNERACION = col_character(),
##   ..   COLE_CODIGO_ICFES = col_character(),
##   ..   COLE_COD_DANE_ESTABLECIMIENTO = col_double(),
##   ..   COLE_NOMBRE_ESTABLECIMIENTO = col_character(),
##   ..   COLE_GENERO = col_character(),
##   ..   COLE_NATURALEZA = col_character(),
##   ..   COLE_CALENDARIO = col_character(),
##   ..   COLE_BILINGUE = col_character(),
##   ..   COLE_CARACTER = col_character(),
##   ..   COLE_COD_DANE_SEDE = col_double(),
##   ..   COLE_NOMBRE_SEDE = col_character(),
##   ..   COLE_SEDE_PRINCIPAL = col_character(),
##   ..   COLE_AREA_UBICACION = col_character(),
##   ..   COLE_JORNADA = col_character(),
##   ..   COLE_COD_MCPIO_UBICACION = col_character(),
##   ..   COLE_MCPIO_UBICACION = col_character(),
##   ..   COLE_COD_DEPTO_UBICACION = col_character(),
##   ..   COLE_DEPTO_UBICACION = col_character(),
##   ..   ESTU_PRIVADO_LIBERTAD = col_character(),
##   ..   ESTU_COD_MCPIO_PRESENTACION = col_character(),
##   ..   ESTU_MCPIO_PRESENTACION = col_character(),
##   ..   ESTU_DEPTO_PRESENTACION = col_character(),
##   ..   ESTU_COD_DEPTO_PRESENTACION = col_character(),
##   ..   PUNT_LECTURA_CRITICA = col_double(),
##   ..   PERCENTIL_LECTURA_CRITICA = col_double(),
##   ..   DESEMP_LECTURA_CRITICA = col_double(),
##   ..   PUNT_MATEMATICAS = col_double(),
##   ..   PERCENTIL_MATEMATICAS = col_double(),
##   ..   DESEMP_MATEMATICAS = col_double(),
##   ..   PUNT_C_NATURALES = col_double(),
##   ..   PERCENTIL_C_NATURALES = col_double(),
##   ..   DESEMP_C_NATURALES = col_double(),
##   ..   PUNT_SOCIALES_CIUDADANAS = col_double(),
##   ..   PERCENTIL_SOCIALES_CIUDADANAS = col_double(),
##   ..   DESEMP_SOCIALES_CIUDADANAS = col_double(),
##   ..   PUNT_INGLES = col_double(),
##   ..   PERCENTIL_INGLES = col_double(),
##   ..   DESEMP_INGLES = col_character(),
##   ..   PUNT_GLOBAL = col_double(),
##   ..   PERCENTIL_GLOBAL = col_double(),
##   ..   ESTU_INSE_INDIVIDUAL = col_character(),
##   ..   ESTU_NSE_INDIVIDUAL = col_double(),
##   ..   ESTU_NSE_ESTABLECIMIENTO = col_double(),
##   ..   ESTU_ESTADOINVESTIGACION = col_character(),
##   ..   `ESTU_GENERACION-E` = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
spec(datos)
## cols(
##   ESTU_TIPODOCUMENTO = col_character(),
##   ESTU_NACIONALIDAD = col_character(),
##   ESTU_GENERO = col_character(),
##   ESTU_FECHANACIMIENTO = col_character(),
##   PERIODO = col_double(),
##   ESTU_CONSECUTIVO = col_character(),
##   ESTU_ESTUDIANTE = col_character(),
##   ESTU_TIENEETNIA = col_character(),
##   ESTU_PAIS_RESIDE = col_character(),
##   ESTU_ETNIA = col_character(),
##   ESTU_DEPTO_RESIDE = col_character(),
##   ESTU_COD_RESIDE_DEPTO = col_character(),
##   ESTU_MCPIO_RESIDE = col_character(),
##   ESTU_COD_RESIDE_MCPIO = col_character(),
##   FAMI_ESTRATOVIVIENDA = col_character(),
##   FAMI_PERSONASHOGAR = col_character(),
##   FAMI_CUARTOSHOGAR = col_character(),
##   FAMI_EDUCACIONPADRE = col_character(),
##   FAMI_EDUCACIONMADRE = col_character(),
##   FAMI_TRABAJOLABORPADRE = col_character(),
##   FAMI_TRABAJOLABORMADRE = col_character(),
##   FAMI_TIENEINTERNET = col_character(),
##   FAMI_TIENESERVICIOTV = col_character(),
##   FAMI_TIENECOMPUTADOR = col_character(),
##   FAMI_TIENELAVADORA = col_character(),
##   FAMI_TIENEHORNOMICROOGAS = col_character(),
##   FAMI_TIENEAUTOMOVIL = col_character(),
##   FAMI_TIENEMOTOCICLETA = col_character(),
##   FAMI_TIENECONSOLAVIDEOJUEGOS = col_character(),
##   FAMI_NUMLIBROS = col_character(),
##   FAMI_COMELECHEDERIVADOS = col_character(),
##   FAMI_COMECARNEPESCADOHUEVO = col_character(),
##   FAMI_COMECEREALFRUTOSLEGUMBRE = col_character(),
##   FAMI_SITUACIONECONOMICA = col_character(),
##   ESTU_DEDICACIONLECTURADIARIA = col_character(),
##   ESTU_DEDICACIONINTERNET = col_character(),
##   ESTU_HORASSEMANATRABAJA = col_character(),
##   ESTU_TIPOREMUNERACION = col_character(),
##   COLE_CODIGO_ICFES = col_character(),
##   COLE_COD_DANE_ESTABLECIMIENTO = col_double(),
##   COLE_NOMBRE_ESTABLECIMIENTO = col_character(),
##   COLE_GENERO = col_character(),
##   COLE_NATURALEZA = col_character(),
##   COLE_CALENDARIO = col_character(),
##   COLE_BILINGUE = col_character(),
##   COLE_CARACTER = col_character(),
##   COLE_COD_DANE_SEDE = col_double(),
##   COLE_NOMBRE_SEDE = col_character(),
##   COLE_SEDE_PRINCIPAL = col_character(),
##   COLE_AREA_UBICACION = col_character(),
##   COLE_JORNADA = col_character(),
##   COLE_COD_MCPIO_UBICACION = col_character(),
##   COLE_MCPIO_UBICACION = col_character(),
##   COLE_COD_DEPTO_UBICACION = col_character(),
##   COLE_DEPTO_UBICACION = col_character(),
##   ESTU_PRIVADO_LIBERTAD = col_character(),
##   ESTU_COD_MCPIO_PRESENTACION = col_character(),
##   ESTU_MCPIO_PRESENTACION = col_character(),
##   ESTU_DEPTO_PRESENTACION = col_character(),
##   ESTU_COD_DEPTO_PRESENTACION = col_character(),
##   PUNT_LECTURA_CRITICA = col_double(),
##   PERCENTIL_LECTURA_CRITICA = col_double(),
##   DESEMP_LECTURA_CRITICA = col_double(),
##   PUNT_MATEMATICAS = col_double(),
##   PERCENTIL_MATEMATICAS = col_double(),
##   DESEMP_MATEMATICAS = col_double(),
##   PUNT_C_NATURALES = col_double(),
##   PERCENTIL_C_NATURALES = col_double(),
##   DESEMP_C_NATURALES = col_double(),
##   PUNT_SOCIALES_CIUDADANAS = col_double(),
##   PERCENTIL_SOCIALES_CIUDADANAS = col_double(),
##   DESEMP_SOCIALES_CIUDADANAS = col_double(),
##   PUNT_INGLES = col_double(),
##   PERCENTIL_INGLES = col_double(),
##   DESEMP_INGLES = col_character(),
##   PUNT_GLOBAL = col_double(),
##   PERCENTIL_GLOBAL = col_double(),
##   ESTU_INSE_INDIVIDUAL = col_character(),
##   ESTU_NSE_INDIVIDUAL = col_double(),
##   ESTU_NSE_ESTABLECIMIENTO = col_double(),
##   ESTU_ESTADOINVESTIGACION = col_character(),
##   `ESTU_GENERACION-E` = col_character()
## )
dim(datos)
## [1] 546212     82

#BASE DE DATOS ICFES COLOMBIA 2019

Reemplazar ‘-’ por NA en toda la base de datos

datos[] <- lapply(datos, function(x) {if (is.character(x)) {x[x == "-"] <- NA}
  return(x)})

#DATOS FALTANTES

missing_data_summary <- datos %>%
  summarise(across(everything(), ~sum(is.na(.)))) %>%
  pivot_longer(cols = everything(), names_to = "Variable", values_to = "MissingValues") %>%
  filter(MissingValues > 0)


print(missing_data_summary)
## # A tibble: 38 × 2
##    Variable              MissingValues
##    <chr>                         <int>
##  1 ESTU_GENERO                     121
##  2 ESTU_TIENEETNIA                 377
##  3 ESTU_ETNIA                   506203
##  4 ESTU_DEPTO_RESIDE               377
##  5 ESTU_COD_RESIDE_DEPTO           377
##  6 ESTU_MCPIO_RESIDE               377
##  7 ESTU_COD_RESIDE_MCPIO           377
##  8 FAMI_ESTRATOVIVIENDA          34507
##  9 FAMI_PERSONASHOGAR            15993
## 10 FAMI_CUARTOSHOGAR             17158
## # ℹ 28 more rows
# Graficar datos faltantes
ggplot(missing_data_summary, aes(x = reorder(Variable, MissingValues), y = MissingValues)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  scale_y_log10(
    labels = scales::label_number(scale = 1e-3, suffix = "k"),
    breaks = c(0, 100, 1000, 10000, 30000, 100000)
  ) +
  labs(
    title = "Variables con Datos Faltantes",
    x = "Variable",
    y = "Número de Datos Faltantes"
  ) +
  theme_minimal()

#Filtramos por las 2 ciudades en las cuales nos enfocaremos

barranquilla_datos <- filter(datos, ESTU_MCPIO_RESIDE == "BARRANQUILLA")
cartagena_datos <- filter(datos, ESTU_MCPIO_RESIDE == "CARTAGENA DE INDIAS")

#FUNCION PARA VARIABLES NUMERICAS : ESTADISTICAS CAJA BIGOTES

estadistica_numerica_boxplot <- function(data, variable) {
  # Extraer la variable
  var_data <- data[[variable]]
  
  # Eliminar NA para evitar problemas en cálculos
  var_data <- na.omit(var_data)
  
  # Calcular estadísticas básicas
  stats <- list(
    Media = mean(var_data),
    Mediana = median(var_data),
    Varianza = var(var_data),
    Desviacion = sd(var_data),
    Minimo = min(var_data),
    Maximo = max(var_data),
    Cuartiles = quantile(var_data, probs = c(0.25, 0.5, 0.75)),
    Percentiles = quantile(var_data, probs = c(0.01, 0.99))
  )
  
  # Mostrar estadísticas
  print(stats)
  
  # Crear un data frame temporal para ggplot
  plot_data <- data.frame(var_data = var_data)
  
  # Crear el boxplot
  plot <- ggplot(plot_data, aes(x = factor(1), y = var_data)) +
    geom_boxplot() +
    labs(title = paste("Boxplot de", variable),
         x = "Variable",
         y = variable) +
    theme_minimal()
  
  # Mostrar el gráfico
  print(plot)
}

#FUNCION PARA VARIABLES CATEG0RICAS : ESTADISTICAS BARRAS

estadistica_categorica_barr <- function(data, variable) {
# Calcular frecuencia de cada categoría
freq_table <- table(data[[variable]])

# Convertir a dataframe para ggplot
df_freq <- as.data.frame(freq_table)
colnames(df_freq) <- c("Category", "Frequency")

# Calcular moda
moda <- names(freq_table)[which.max(freq_table)]

# Calcular estadísticas básicas
stats <- list(
  Total = sum(freq_table),
  Moda = moda,
  Frequencies = freq_table
)

# Mostrar estadísticas
print(stats)

# Crear el gráfico de barras
plot <- ggplot(df_freq, aes(x = Category, y = Frequency, fill = Category)) +
  geom_bar(stat = "identity") +
  labs(title = paste("Distribución de", variable),
       x = "Categoría",
       y = "Frecuencia") +
  theme_minimal()

# Mostrar el gráfico
print(plot)
}

#GRAFICA VARIABLE CATEGORICA COMPARADA CON EL PUNTAJE GLOBAL

variablecategorica_vs_ptglobal <- function(data, categorical_var) {
  # Verificar que la variable categórica existe en el dataset
  if (!(categorical_var %in% names(data))) {
    stop("La variable categórica no se encuentra en el dataset.")
  }
  
  # Filtrar los datos para excluir NA en la variable categórica y el puntaje global
  filtered_data <- data %>%
    filter(!is.na(.data[[categorical_var]]), !is.na(PUNT_GLOBAL))
  
  # Agrupar por la variable categórica y calcular la media del puntaje global
  summary_data <- filtered_data %>%
    group_by_at(categorical_var) %>%
    summarise(mean_punt_global = mean(PUNT_GLOBAL, na.rm = TRUE))
  
  # Crear el gráfico de barras
  plot <- ggplot(summary_data, aes(x = reorder(!!sym(categorical_var), mean_punt_global), y = mean_punt_global)) +
    geom_bar(stat = "identity", fill = "skyblue") +
    labs(title = paste("Puntaje Global por", categorical_var),
         x = categorical_var,
         y = "Media del Puntaje Global") +
    theme_minimal() +
    coord_flip()  # Opcional: para mejor visualización si hay muchas categorías
  
  # Mostrar el gráfico
  print(plot)
}

#COMPARACION DE VARIABLES CATEGORICAS POR CIUDAD

compare_two_cities_categorical <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "stack") {
  # Crear un dataframe combinado con las 2 ciudades
  combined_data <- rbind(
    data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
    data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
  )
  
  # Eliminar NA
  combined_data <- na.omit(combined_data)
  
  # Convertir la variable categórica en un factor
  combined_data$Categoria <- as.factor(combined_data$Categoria)
  
  # Crear el gráfico de barras
  plot <- ggplot(combined_data, aes(x = Ciudad, fill = Categoria)) +
    geom_bar(position = position) +
    labs(title = paste("Distribución de", variable, "entre", city1_name, "y", city2_name),
         y = "Frecuencia",
         x = "Ciudad") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
  # Mostrar el gráfico
  print(plot)
}

#Comparacion entre ciudades variable categorica PROPORCIONAL

compare_two_cities_categorical_proportions <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "stack") {
  # Crear un dataframe combinado con las 2 ciudades
  combined_data <- rbind(
    data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
    data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
  )
  
  # Eliminar NA
  combined_data <- na.omit(combined_data)
  
  # Convertir la variable categórica en un factor
  combined_data$Categoria <- as.factor(combined_data$Categoria)
  
  # Calcular proporciones
  proportion_data <- combined_data %>%
    group_by(Ciudad, Categoria) %>%
    summarise(Count = n(), .groups = 'drop') %>%
    group_by(Ciudad) %>%
    mutate(Proporcion = Count / sum(Count)) %>%
    ungroup()
  
  # Crear el gráfico de barras
  plot <- ggplot(proportion_data, aes(x = Ciudad, y = Proporcion, fill = Categoria)) +
    geom_bar(stat = "identity", position = position) +
    labs(title = paste("Distribución Proporcional de", variable, "entre", city1_name, "y", city2_name),
         y = "Proporción",
         x = "Ciudad") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
  # Mostrar el gráfico
  print(plot)
}

#Grafico comparando 2 ciudades variable numerica

compare_two_cities_violin <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2") {
  # Crear un dataframe combinado con las 2 ciudades
  combined_data <- rbind(
    data.frame(Ciudad = city1_name, Valor = city1_data[[variable]]),
    data.frame(Ciudad = city2_name, Valor = city2_data[[variable]])
  )
  
  # Eliminar NA
  combined_data <- na.omit(combined_data)
  
  # Crear el gráfico de violín
  plot <- ggplot(combined_data, aes(x = Ciudad, y = Valor, fill = Ciudad)) +
    geom_violin(trim = FALSE, alpha = 0.5) +  # Gráfico de violín para mostrar la distribución
    geom_jitter(width = 0.2, alpha = 0.3) +   # Agrega puntos dispersos para ver datos individuales
    labs(title = paste("Distribución de", variable, "entre", city1_name, "y", city2_name),
         y = variable,
         x = "Ciudad") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
  # Mostrar el gráfico
  print(plot)
}

#Grafico de pastel por porcentaje

plot_pie_chart <- function(data, variable) {
  # Verificar que la base de datos no sea NULL y contenga la variable
  if (is.null(data) || !variable %in% names(data)) {
    stop("La base de datos es NULL o la variable no existe en la base de datos.")
  }
  
  # Asegurarse de que la variable categórica esté en formato factor y eliminar NA
  data <- data %>%
    filter(!is.na(.[[variable]]))
  
  data[[variable]] <- as.factor(data[[variable]])
  
  # Calcular la frecuencia de cada categoría
  category_counts <- data %>%
    group_by(Categoria = .[[variable]]) %>%
    summarise(Count = n(), .groups = 'drop') %>%
    mutate(Proporcion = Count / sum(Count),
           Porcentaje = Proporcion * 100)
  
  # Crear el gráfico de pastel
  plot <- ggplot(category_counts, aes(x = "", y = Proporcion, fill = Categoria)) +
    geom_bar(width = 1, stat = "identity") +
    coord_polar(theta = "y") +
    labs(title = paste("Distribución de", variable, "en la Ciudad"),
         y = "Proporción") +
    theme_void() +
    theme(legend.title = element_blank()) +
    geom_text(aes(label = paste0(round(Porcentaje, 1), "%")),
              position = position_stack(vjust = 0.5))
  
  # Mostrar el gráfico
  print(plot)
}
#Comparacion entre ciudades variable categorica PROPORCIONAL

compare_two_cities_categorical_proportions <- function(city1_data, city2_data, variable, city1_name = "Ciudad 1", city2_name = "Ciudad 2", position = "dodge") {
  # Crear un dataframe combinado con las 2 ciudades
  combined_data <- rbind(
    data.frame(Ciudad = city1_name, Categoria = city1_data[[variable]]),
    data.frame(Ciudad = city2_name, Categoria = city2_data[[variable]])
  )
  
  # Eliminar NA
  combined_data <- na.omit(combined_data)
  
  # Convertir la variable categórica en un factor
  combined_data$Categoria <- as.factor(combined_data$Categoria)
  
  # Calcular proporciones
  proportion_data <- combined_data %>%
    group_by(Ciudad, Categoria) %>%
    summarise(Count = n(), .groups = 'drop') %>%
    group_by(Ciudad) %>%
    mutate(Proporcion = Count / sum(Count)) %>%
    ungroup()
  
  # Crear el gráfico de barras
  plot <- ggplot(proportion_data, aes(x = Ciudad, y = Proporcion, fill = Categoria)) +
    geom_bar(stat = "identity", position = position) +
    labs(title = paste("Distribución Proporcional de", variable, "entre", city1_name, "y", city2_name),
         y = "Proporción",
         x = "Ciudad") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1))
  
  # Mostrar el gráfico
  print(plot)
}

Función para graficar la distribución de una variable

grafica_distribucion <- function(data, variable) {
  # Asegurarse de que la variable existe en el dataframe
  if (!(variable %in% names(data))) {
    stop("La variable especificada no se encuentra en el dataframe.")
  }
  
  # Crear el gráfico
  plot <- ggplot(data, aes(x = !!sym(variable))) +
    geom_histogram(aes(y = ..density..), bins = 30, fill = "blue", color = "black", alpha = 0.7) +
    geom_density(color = "red", size = 1) +
    labs(title = paste("Distribución de", variable),
         x = variable,
         y = "Densidad") +
    theme_minimal()
  
  # Mostrar el gráfico
  print(plot)
}

#APLICACION FUNCIONES

#PUNTAJE GLOBAL

estadistica_numerica_boxplot(barranquilla_datos, "PUNT_GLOBAL")
## $Media
## [1] 248.7109
## 
## $Mediana
## [1] 245
## 
## $Varianza
## [1] 2927.063
## 
## $Desviacion
## [1] 54.10234
## 
## $Minimo
## [1] 80
## 
## $Maximo
## [1] 437
## 
## $Cuartiles
## 25% 50% 75% 
## 207 245 288 
## 
## $Percentiles
##     1%    99% 
## 148.00 371.24

grafica_distribucion(barranquilla_datos, "PUNT_GLOBAL")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

estadistica_numerica_boxplot(cartagena_datos, "PUNT_GLOBAL")
## $Media
## [1] 236.1468
## 
## $Mediana
## [1] 230
## 
## $Varianza
## [1] 2856.757
## 
## $Desviacion
## [1] 53.44863
## 
## $Minimo
## [1] 88
## 
## $Maximo
## [1] 475
## 
## $Cuartiles
## 25% 50% 75% 
## 195 230 273 
## 
## $Percentiles
##  1% 99% 
## 145 367

grafica_distribucion(cartagena_datos, "PUNT_GLOBAL")

compare_two_cities_violin(barranquilla_datos, cartagena_datos, "PUNT_GLOBAL", city1_name = "Barranquilla", city2_name = "Cartagena")

#INFORMACION VARIABLE CATEGORICA POR CIUDAD

estadistica_categorica_barr(barranquilla_datos, "FAMI_NUMLIBROS")
## $Total
## [1] 15721
## 
## $Moda
## [1] "0 A 10 LIBROS"
## 
## $Frequencies
## 
##     0 A 10 LIBROS    11 A 25 LIBROS   26 A 100 LIBROS MÁS DE 100 LIBROS 
##              6389              5135              3231               966

estadistica_categorica_barr(cartagena_datos, "FAMI_NUMLIBROS")
## $Total
## [1] 12136
## 
## $Moda
## [1] "0 A 10 LIBROS"
## 
## $Frequencies
## 
##     0 A 10 LIBROS    11 A 25 LIBROS   26 A 100 LIBROS MÁS DE 100 LIBROS 
##              5325              3864              2205               742

estadistica_categorica_barr(barranquilla_datos, "ESTU_DEDICACIONINTERNET")
## $Total
## [1] 16061
## 
## $Moda
## [1] "Entre 1 y 3 horas"
## 
## $Frequencies
## 
##    30 minutos o menos     Entre 1 y 3 horas Entre 30 y 60 minutos 
##                  2175                  5204                  4068 
##        Más de 3 horas    No Navega Internet 
##                  4105                   509

estadistica_categorica_barr(cartagena_datos, "ESTU_DEDICACIONINTERNET")
## $Total
## [1] 12353
## 
## $Moda
## [1] "Entre 1 y 3 horas"
## 
## $Frequencies
## 
##    30 minutos o menos     Entre 1 y 3 horas Entre 30 y 60 minutos 
##                  2014                  3903                  3175 
##        Más de 3 horas    No Navega Internet 
##                  2738                   523

estadistica_categorica_barr(barranquilla_datos, "ESTU_DEDICACIONLECTURADIARIA")
## $Total
## [1] 16093
## 
## $Moda
## [1] "30 minutos o menos"
## 
## $Frequencies
## 
##         30 minutos o menos          Entre 1 y 2 horas 
##                       5657                       1978 
##      Entre 30 y 60 minutos             Más de 2 horas 
##                       4482                       1058 
## No leo por entretenimiento 
##                       2918

estadistica_categorica_barr(cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA")
## $Total
## [1] 12377
## 
## $Moda
## [1] "30 minutos o menos"
## 
## $Frequencies
## 
##         30 minutos o menos          Entre 1 y 2 horas 
##                       4531                       1529 
##      Entre 30 y 60 minutos             Más de 2 horas 
##                       3446                        714 
## No leo por entretenimiento 
##                       2157

plot_pie_chart(barranquilla_datos, "ESTU_GENERO" )

plot_pie_chart(cartagena_datos, "ESTU_GENERO" )

plot_pie_chart(barranquilla_datos, "FAMI_TIENEINTERNET" )

plot_pie_chart(cartagena_datos, "FAMI_TIENEINTERNET" )

plot_pie_chart(barranquilla_datos, "FAMI_SITUACIONECONOMICA")

plot_pie_chart(cartagena_datos, "FAMI_SITUACIONECONOMICA")

#COMPARACIONES POR CIUDAD CON EL PUNTAJE GLOBAL

variablecategorica_vs_ptglobal(barranquilla_datos, "ESTU_DEDICACIONINTERNET")

variablecategorica_vs_ptglobal(cartagena_datos, "ESTU_DEDICACIONINTERNET")

variablecategorica_vs_ptglobal(barranquilla_datos, "ESTU_DEDICACIONLECTURADIARIA")

variablecategorica_vs_ptglobal(cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA")

variablecategorica_vs_ptglobal(barranquilla_datos, "FAMI_ESTRATOVIVIENDA")

variablecategorica_vs_ptglobal(cartagena_datos, "FAMI_ESTRATOVIVIENDA")

variablecategorica_vs_ptglobal(barranquilla_datos, "FAMI_NUMLIBROS")

variablecategorica_vs_ptglobal(cartagena_datos,"FAMI_NUMLIBROS")

#COMPARACIONES CATEGORICAS ENTRE CIUDADES

compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_ESTRATOVIVIENDA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")

compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_TIENEINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")

compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "FAMI_SITUACIONECONOMICA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")

compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")

compare_two_cities_categorical(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "stack")

#COMPARACIONES CATEGORICAS ENTRE CIUDADES DE MANERA PROPORCIONAL

compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONLECTURADIARIA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")

compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "ESTU_DEDICACIONINTERNET", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")

compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "FAMI_SITUACIONECONOMICA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")

compare_two_cities_categorical_proportions(barranquilla_datos, cartagena_datos, "FAMI_ESTRATOVIVIENDA", city1_name = "Barranquilla", city2_name = "Cartagena", position = "dodge")