# Lectura de la base de datos
load("base_total.RData")
load('base_total0.RData')
Análisis Descriptivo y Primeros modelos de la BD Final
Introducción:
Una vez creada la BD (Base de Datos) final (todo el código esta en Join_BD.R
) en la cual se contienen las variables:
Inscritos
Admitidos
Matriculados
Graduados
Procedemos a procesar los datos por medio de un análisis descriptivo e inferencia para entender mejor los datos.
Lamentablemente al unir las BD en una sola presentamos un inconveniente y es que el método de la función merge
utilizado (y el único posible) es que cumpla todas las condiciones de las siguientes columnas:
names(base_total)[1:16]
[1] "codigo_de_la_institucion" "principal_o_seccional"
[3] "sector_ies" "caracter_ies"
[5] "codigo_del_departamento_ies" "codigo_del_municipio_ies"
[7] "codigo_snies_del_programa" "nivel_de_formacion"
[9] "metodologia" "area_de_conocimiento"
[11] "nucleo_basico_del_conocimiento_nbc" "departamento_de_oferta_del_programa"
[13] "codigo_del_municipio_programa" "sexo"
[15] "ano" "semestre"
Por ende al ser tantas características tenemos que ningunas de las siguientes columnas presenta valores aledaños a los demás, es decir, no hay una fila que tenga datos en las columnas sin tener una o más con valores NA
names(base_total)[17:21]
[1] "inscritos" "admitidos" "matriculados" "primer_curso" "graduados"
Por lo cual el análisis será individual, en parejas o en casos específicos tomando 3 variables (inscritos, admitidos y graduados).
Por ultimo descartaremos inicialmente las variables matriculados
y primer_curso
ya que aun no encontramos como algún tipo de relevancia para este documento y su enfoque en la investigación final, además cabe aclarar que estas dos columnas afectan gravemente por la cantidad de NA’s presentes.
Veamos mejor un gráfico de representación de missing data.
- Haremos un gráfico con todas las categorías para hacer nuestro unión en una sola BD
- Haremos otro gráfico para las columnas que se añadieron (o mejor dicho, las únicas cuantitativas en nuestro dataset).
Como podemos ver hay demasiados valores faltantes por ende procedemos a crear una copia organizada de la BD original:
<- base_total0[, -c(24, 25, 2, 7, 9, 11, 18, 2)]
copy
## valores lógicos si tienen na
<- complete.cases(copy)
aux
## base sin na
<- copy[aux, ]
copy_sin_na
# Organizar y remplazar valores para una mejor BD:
$caracter_ies <- str_replace_all(copy_sin_na$caracter_ies,
copy_sin_nac("UNIVERSIDAD" = "Universidad",
"INSTITUCION UNIVERSITARIA/ESCUELA TECNOLOGICA"="Institución Universitaria/Escuela Tecnológica",
"INSTITUCIÓN UNIVERSITARIA/ESCUELA TECNOLÓGICA" = "Institución Universitaria/Escuela Tecnológica",
"INSTITUCION TECNOLOGICA" =
"Institución Tecnológica",
"INSTITUCIÓN TECNOLÓGICA" =
"Institución Tecnológica",
"INSTITUCION TECNICA PROFESIONAL" =
"Institución Técnica Profesional",
"INSTITUCIÓN TÉCNICA PROFESIONAL" =
"Institución Técnica Profesional"))
#copy_sin_na$nivel_de_formacion %>% unique()
$nivel_de_formacion <- str_replace_all(copy_sin_na$nivel_de_formacion,
copy_sin_nac("Universitaria" =
"Universitario",
"Tecnológica" = "Tecnólogo",
"Tecnológico" = "Tecnólogo"))
$metodologia <- str_replace_all(copy_sin_na$metodologia,
copy_sin_nac("A distancia" = "Distancia",
"Distancia (virtual)" =
"Distancia_virtual",
"Distancia (tradicional)" =
"Distancia"))
$departamento_de_oferta_del_programa <-
copy_sin_natolower(copy_sin_na$departamento_de_oferta_del_programa)
$departamento_de_oferta_del_programa <-
copy_sin_nastr_replace_all(copy_sin_na$departamento_de_oferta_del_programa,
c("á" = "a", "é" = "e",
"í" = "i", "ó" = "o", "ú" = "u"))
$departamento_de_oferta_del_programa <-
copy_sin_nastr_replace_all(copy_sin_na$departamento_de_oferta_del_programa,
c("bogota d.c" = "bogota",
"bogota d.c." = "bogota",
"bogota, d.c." = "bogota",
"bogota." = "bogota"))
$inscritos %<>% as.numeric()
copy_sin_na$admitidos %<>% as.numeric()
copy_sin_na$graduados %<>% as.numeric() copy_sin_na
Descriptivas de variables categoricas:
Como la mayoría de las variables en nuestra BD corresponden a caracterizaciones tales como el sexo, semestre, departamento, entre otras; observaremos inicialmente sin tener en cuenta las únicas variables cuantitativas (las ultimas columnas de nuestra base de datos)
Tabla de contigencia del Caracter de la IES vs Sector:
Como podemos ver hay más universidades que otro tipo de instituciones, además que las privadas cuentas con números mayores en el conteo de estudiantes que se inscribieron, admitieron y ahora son graduados de los años 2018, 2020 y 2021.
Para ver ahora estos registros pero con el conteo de los inscritos por año
Como podemos ver los datos de Inscritos por año en las universidades ha disminuido, así como las otras instituciones al paso de los años.; Esto se debe a que estamos en una recuperación dado de que los datos desde el 2019 y comienzos del 2021 son de la pandemia por lo que mundialmente se registran casos de deserción.
Ahora observaremos como la metodología virtual fluctuó y en que proporción por año en comparación con la presencialidad a la hora de ofrecer “x o y” carrera.
referencia: deserción en Colombia en 2020
Los datos de la virtualidad se registran desde el año 2021, esto se le atribuye a que los registros pre-pandemia de estas carreras no eran tan relevantes por ser pocas y de poco interés del publico nacional; ahora una vez ocurrido el encierre y las actualizaciones a los servicios de comunicación como meet y zoom se nota un incremento representando aproximadamente el 10% en comparación de la presencialidad, la metodología a distancia también se afecto con la misma proporción y según fuentes (Impacto de la transición de la educación tradicional a la virtual, Educación virtual: ¿Más efectiva que clases presenciales?) es inevitable los cambios a una nueva normalidad dependiendo de plataformas para capacitarse en algún área.
Otra tabla interesante que sale como pregunta de la anterior es: ¿Cómo se vio afectado los graduados de pregrado por los años presentes según su metodología?
Vemos que los números de los graduados son demasiado altos, sin comparar con la presencialidad, esto nos dice que más de 24 mil personas se graduaron de pregrado en el año 2021 en Colombia, este mismo caso ocurre con los casos de modalidad a distancia, ya que como dijimos anteriormente era un método casi necesario para no detener los estudios de estudiantes que gracias a esto las restricciones no fueron un impedimento; la pandemia presento una reducción en el 2021 por lo cual se nota una reducción con el año anterior y en el 2018.
Relación de Aspecto:
En esta sección queremos sacar el cociente de los promedios entre admitidos/ingresados y graduados/admitidos, esto se hace con la finalidad de tener una proporción y compararlas entre ellas para saber el flujo que hay entre lo que entre y lo que sale en los casos anteriores.
En esta tabla vemos un cociente interesante para la comparación entre el número de inscritos y admitidos en los años 2018, 2020 y 2021, además con el interés de saber que tipo de instituciones hay menos igualdad en los accesos a la educación ya sea por examen o entrevista.
Algo a destacar es el año 2018 y como las IES privadas admitieron un poco más de los estudiantes que se inscribieron ese mismo año, en contraste a las IES publicas que admitieron un poco más del 70% de los inscritos, además de que para el año 2021 bajo el porcentaje en los dos sectores.
Esto puede ser un indicador de que las IES tanto publicas como privadas se han vuelto más selectivas (hasta un 20% de rigurosidad) a la hora de admitir un estudiante a una carrera de pregrado.
En este caso, este cociente refleja que los graduados en las IES privadas a pesar de enfrentar una pandemia siguieron graduando a sus estudiantes, para el caso de las IES publicas la tasa del 2020 fue muy baja, es decir, solo el 50% de los admitidos fueron graduados ese año, por lo que poco a poco representará una acumulación de estudiantes por año en las IES publicas, esto se puede ver en el año 2021 donde represento la tasa más alta de los tres años estudiados; podría decirse que es una porcentaje bueno pero solo muestra que una porción de estudiantes graduados del 2021 debieron graduarse en el 2020 como acumulación, dado de que cada IES se espera que tenga en proporción un flujo de admitidos a los graduados.
Serie de Admitidos y Graduados
load("series.RData")
<- serie1 %>%
p ggplot(aes(x=ano,y = total,
group = Estado_Estudiante,
colour = Estado_Estudiante,
shape = Estado_Estudiante))+
geom_point()+geom_line()+
scale_y_continuous(breaks = c(0,300000,600000,900000,1200000),
labels = c(0,"300k", "600k", "900k", "1.2M"))+
labs(y = "Conteo Total", x = "Año",
title = "Serie anual del conteo total de estudiantes")+
theme_minimal()+
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
%>% ggplotly() p
El gráfico nos muestra una serie de tiempo del conteo total realizado por año según el estado del estudiante, esto nos da una idea general de la escala de los admitidos y graduados totales por año, con esto en mente decimos que el crecimiento de los admitidos por año se incremente de manera súbita, tanto que los años 2007 y 2011 son los que registran los picos locales para que tenga esta forma montañosa, ahora en comparación con los graduados notamos un crecimiento algo lineal y más normalizado.
La comparativa muestra algo preocupante en el caso de los admitidos, de antemano se sabe que las IES no amplían sus instalaciones año tras año para recibir estudiantes de manera exponencial, más bien se crece gradualmente en el plazo mínimo de 2 a 4 años (si se cuenta con los recursos, como el caso de las IES privadas).
Los graduados representan una escala más lineal y esto se debe a que es aplanada por los admitidos, por lo cual para nuestra problemática es algo a tener en cuenta dentro de los factores para que una persona escoja una carrera sobre otra y es el hecho de crear una tasa de las personas que se gradúan desde el punto de la deserción que presenta esa carrera en la IES especifica.
Modelo apriori apriori para los graduados:
Una pregunta que nos cuestionamos fue el hecho de poder decir si la cantidad de graduados por año se podría modelar debido a su importancia, es decir, según las características históricas poder modelar el número total de graduados en un año para los estudiantes de pregrado.
Antes que nada montamos un subset para la creación del modelo:
<- copy_sin_na %>% dplyr::select(principal_o_seccional, sector_ies,
mydata
caracter_ies,nivel_de_formacion,
metodologia,area_de_conocimiento,
nucleo_basico_del_conocimiento_nbc,
departamento_de_oferta_del_programa,
sexo, ano, semestre, inscritos,
admitidos, graduados)
# Cambiamos la estructura de algunas variables
# para un mejor desarrollo del problema
<- mydata %>%
mydata mutate_at(vars(graduados, inscritos, admitidos, ano), as.numeric) %>%
mutate_at(vars(sexo, semestre, metodologia, nivel_de_formacion, caracter_ies,
nucleo_basico_del_conocimiento_nbc, principal_o_seccional,
sector_ies,
area_de_conocimiento, departamento_de_oferta_del_programa), as.factor)
Aplicando el modelo de regresión tradicional con la función lm()
, no hay un desarrollo claro, uno de los factores que no permite el desarrollo optimo de la función es la capacidad comunicacional de los computadores usados, por lo cual se toma otro desarrollo, aun así se deja planteado el código utilizado con la función lm()
:
# Fit the linear regression model por metodo tradicional
<- lm(graduados ~ ., data = mydata)
model
summary(mydata)
Nos decantamos al final por método de aprendizaje de maquina, esto también aplicando el desarrollo de una regresión, además uno de los beneficios de este tipo de métodos es la capacidad de particionar los datos para la validación de los mismos y poder calcular el sobre-ajuste .
Gracias a la librería caret
desarrollamos la regresión por medio de la función train()
, pero antes de la aplicación se particionan los datos:
# Split the data into training and validation sets
set.seed(123)
<- createDataPartition(mydata$graduados, p = 0.7, list = FALSE)
split <- mydata[split, ]
train <- mydata[-split, ] validate
Una vez los datos están en entrenamiento y validación aplicamos la función para la creación del modelo:
# Fit the linear regression model
<- train(graduados ~ ., data = train, method = "lm") model
Este modelo presenta unas advertencias dado a la multicolinealidad de los datos, esto se debe a que los graduados dependen demasiado o en su totalidad de los ingresados y admitidos de ese año; esto se debe en parte a a la liberación de cupos por año que se da al graduarse un grupo de personas, por lo cual da espacio a la universidad de brindar atención en bienestar o en otras áreas como extensión para los nuevos admitidos.
# Make predictions on the validation set
<- predict(model, newdata = validate)
predictions
########### calculo de métricas de rendimiento
# Calculate mean absolute error
<- mean(abs(predictions - validate$graduados))
mae
# Calculate root mean squared error
<- sqrt(mean((predictions - validate$graduados)^2))
rmse
# Calculate R-squared
<- 1 - (sum((predictions - validate$graduados)^2) / sum((validate$graduados - mean(validate$graduados))^2)) r2
En el anterior bloque de código hacemos las predicciones de los datos para compararlas con los datos de validación y se calculan las respectivas métricas para observar que tan bueno es el modelo
# Print the performance metrics
print(paste("MAE:", mae))
[1] "MAE: 11.1006387475744"
print(paste("RMSE:", rmse))
[1] "RMSE: 26.9221760052996"
print(paste("R-squared:", r2))
[1] "R-squared: 0.383567773803164"
En las métricas vemos algo claramente bueno, es decir con el MAE y el RMSE dado a sus valores tan bajos, si nos dejamos llevar por el R-cuadrado no es relativamente bueno pero al observar el nivel de error el la diferencia de los reales vs los predichos tenemos que:
## evaluando el sobre-ajuste usando el MAE
<- predict(model, newdata = train)
train_predictions <- predict(model, newdata = validate)
validate_predictions
# Calculate the MAE on the training and validation sets
<- mean(abs(train_predictions - train$graduados))
train_mae <- mean(abs(validate_predictions - validate$graduados))
validate_mae
# Calculate the percentage difference between the MAE on the training and validation sets
<- 100 * (validate_mae - train_mae) / train_mae
difference
# Print the percentage difference
print(paste("Percentage difference:", difference, "%"))
[1] "Percentage difference: 2.82685249018726 %"
La diferencia porcentual de error es menor al 3% por lo cual este modelo cumple de buena manera (sin ningún tipo de intervención), lo que nos puede asegurar lo que esperábamos, la capacidad de modelar el número de graduados año tras año.
Nota: queda pendiente el hecho de la multicolinealidad entre las ultimas columnas
Clustering:
Ahora otro tipo de método que decidimos aplicar es un cluster para la agrupaciones que se puedan dar en nuestra BD
De antemano fijamos el número de cluster igual a 5
# Set the number of clusters
<- 5 k
Aplicando el modelo por medio de la función kmodes()
de la librería klaR
, tenemos un cluster para las variables categóricas no codificadas
# Build the k-modes clustering model
<- kmodes(mydata, modes = k, iter.max = 20)
model
# Print the cluster assignments
print(paste("Cluster assignments:", model$cluster), max = 50)
[1] "Cluster assignments: 1" "Cluster assignments: 5" "Cluster assignments: 1"
[4] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 5"
[7] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 1"
[10] "Cluster assignments: 5" "Cluster assignments: 1" "Cluster assignments: 1"
[13] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 1"
[16] "Cluster assignments: 5" "Cluster assignments: 1" "Cluster assignments: 1"
[19] "Cluster assignments: 1" "Cluster assignments: 5" "Cluster assignments: 1"
[22] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 5"
[25] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 1"
[28] "Cluster assignments: 5" "Cluster assignments: 1" "Cluster assignments: 1"
[31] "Cluster assignments: 1" "Cluster assignments: 5" "Cluster assignments: 1"
[34] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 2"
[37] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 1"
[40] "Cluster assignments: 5" "Cluster assignments: 1" "Cluster assignments: 1"
[43] "Cluster assignments: 1" "Cluster assignments: 5" "Cluster assignments: 1"
[46] "Cluster assignments: 1" "Cluster assignments: 1" "Cluster assignments: 5"
[49] "Cluster assignments: 1" "Cluster assignments: 1"
[ reached getOption("max.print") -- omitted 44513 entries ]
Por ultimo vemos las asignaciones que se presento por los 5 cluster
el segundo paso dentro de estos métodos es la realización visuales para un mejor entendimiento del cluster:
# Subset calsificando por cluster
<- cbind(mydata, cluster = model$cluster) mydata_clustered
Ahora aplicando una caracterización para ver como se comportan (porcentualmente) las variables categóricas en los respectivos cluster:
### caracterización de los cluster
####3 para la variable sexo
<- ggplot(mydata_clustered, aes(x = sexo, fill = sexo)) +
p geom_bar(aes(y = (..count..)/sum(..count..)))+theme_minimal()+
facet_wrap(~ cluster)+theme(legend.position = "none")+
labs(y = "Porcentaje", x = "Sexo",
title = "Facetado por Cluster")+
theme(legend.position = "none")
%>% ggplotly() p
Podemos notar que en el cluster 1 y el cluster 4 es donde la mujeres priman en dichas categorías, mientras que para el cluster 2, 3 y 5 los hombres resaltan en su mayoría.
#### resumen numérico para las variables continuas
by(mydata_clustered[, c("inscritos", "admitidos", "graduados")],
$cluster, describe) mydata_clustered
mydata_clustered$cluster: 1
data[x, , drop = FALSE]
3 Variables 11494 Observations
--------------------------------------------------------------------------------
inscritos
n missing distinct Info Mean Gmd .05 .10
11494 0 722 1 94.43 131.8 2.65 5.00
.25 .50 .75 .90 .95
13.00 35.00 82.00 195.70 337.35
lowest : 1 2 3 4 5, highest: 5488 6265 7087 7758 8415
--------------------------------------------------------------------------------
admitidos
n missing distinct Info Mean Gmd .05 .10
11494 0 366 1 42.31 50.04 2.0 4.0
.25 .50 .75 .90 .95
10.0 24.0 44.0 81.7 123.0
lowest : 1 2 3 4 5, highest: 2328 2329 2678 3233 3474
--------------------------------------------------------------------------------
graduados
n missing distinct Info Mean Gmd .05 .10
11494 0 189 0.995 15.61 19.52 1 1
.25 .50 .75 .90 .95
3 7 18 34 51
lowest : 1 2 3 4 5, highest: 848 961 1016 1169 1272
--------------------------------------------------------------------------------
------------------------------------------------------------
mydata_clustered$cluster: 2
data[x, , drop = FALSE]
3 Variables 8035 Observations
--------------------------------------------------------------------------------
inscritos
n missing distinct Info Mean Gmd .05 .10
8035 0 381 1 45.51 57.05 2 4
.25 .50 .75 .90 .95
9 20 48 107 170
lowest : 1 2 3 4 5, highest: 1081 1210 1328 1476 1846
--------------------------------------------------------------------------------
admitidos
n missing distinct Info Mean Gmd .05 .10
8035 0 288 0.999 32.65 38.96 2 3
.25 .50 .75 .90 .95
7 16 36 75 111
lowest : 1 2 3 4 5, highest: 811 825 835 862 933
--------------------------------------------------------------------------------
graduados
n missing distinct Info Mean Gmd .05 .10
8035 0 186 0.998 18.4 21.57 1 2
.25 .50 .75 .90 .95
4 10 22 42 61
lowest : 1 2 3 4 5, highest: 424 511 619 622 647
--------------------------------------------------------------------------------
------------------------------------------------------------
mydata_clustered$cluster: 3
data[x, , drop = FALSE]
3 Variables 8174 Observations
--------------------------------------------------------------------------------
inscritos
n missing distinct Info Mean Gmd .05 .10
8174 0 514 0.999 65.73 97.44 1 3
.25 .50 .75 .90 .95
8 20 50 122 219
lowest : 1 2 3 4 5, highest: 3811 6217 8374 8641 8997
--------------------------------------------------------------------------------
admitidos
n missing distinct Info Mean Gmd .05 .10
8174 0 376 0.999 42.26 57.54 1.0 3.0
.25 .50 .75 .90 .95
7.0 17.0 39.0 82.0 137.3
lowest : 1 2 3 4 5, highest: 2044 2047 2115 2196 4701
--------------------------------------------------------------------------------
graduados
n missing distinct Info Mean Gmd .05 .10
8174 0 201 0.996 17.04 22.16 1 1
.25 .50 .75 .90 .95
3 7 17 35 55
lowest : 1 2 3 4 5, highest: 836 983 1023 1149 1375
--------------------------------------------------------------------------------
------------------------------------------------------------
mydata_clustered$cluster: 4
data[x, , drop = FALSE]
3 Variables 6886 Observations
--------------------------------------------------------------------------------
inscritos
n missing distinct Info Mean Gmd .05 .10
6886 0 440 1 60.7 77.39 2.0 5.0
.25 .50 .75 .90 .95
11.0 27.0 63.0 135.5 221.0
lowest : 1 2 3 4 5, highest: 2042 2388 2441 3480 4670
--------------------------------------------------------------------------------
admitidos
n missing distinct Info Mean Gmd .05 .10
6886 0 297 1 39.17 45.04 2 4
.25 .50 .75 .90 .95
10 22 44 84 123
lowest : 1 2 3 4 5, highest: 1264 1871 1909 2048 3405
--------------------------------------------------------------------------------
graduados
n missing distinct Info Mean Gmd .05 .10
6886 0 149 0.996 15.71 18.54 1 1
.25 .50 .75 .90 .95
3 8 19 38 56
lowest : 1 2 3 4 5, highest: 249 264 297 401 678
--------------------------------------------------------------------------------
------------------------------------------------------------
mydata_clustered$cluster: 5
data[x, , drop = FALSE]
3 Variables 9974 Observations
--------------------------------------------------------------------------------
inscritos
n missing distinct Info Mean Gmd .05 .10
9974 0 575 1 77.97 107.2 3.0 5.0
.25 .50 .75 .90 .95
12.0 30.0 68.0 155.0 246.4
lowest : 1 2 3 4 5, highest: 6676 7513 7753 8280 8396
--------------------------------------------------------------------------------
admitidos
n missing distinct Info Mean Gmd .05 .10
9974 0 326 1 36.92 43.56 2.0 4.0
.25 .50 .75 .90 .95
9.0 21.0 39.0 73.0 109.4
lowest : 1 2 3 4 5, highest: 1617 2208 3184 3798 3980
--------------------------------------------------------------------------------
graduados
n missing distinct Info Mean Gmd .05 .10
9974 0 158 0.995 13.72 16.48 1 1
.25 .50 .75 .90 .95
3 7 16 31 45
lowest : 1 2 3 4 5, highest: 469 520 553 738 758
--------------------------------------------------------------------------------
Por medio de la función describe()
vemos un resumen numérico de los datos por cluster y algo a rescatar es su promedio por cada grupo creado, por lo cual decimos que el cluster 1 alberga más características con similitudes, pero a la vez es superado por el cluster número 5.
####3 para la variable área del conocimiento
<- ggplot(mydata_clustered, aes(x =area_de_conocimiento,
p fill = area_de_conocimiento)) +
geom_bar(aes(y = (..count..)/sum(..count..)))+theme_minimal()+
facet_wrap(~ cluster)+
labs(y = "Porcentaje", x = "Área de Conocimiento",
title = "Facetado por Cluster")+
theme(legend.position = "none",axis.text.x = element_blank())
%>% ggplotly() p
Aquí vemos como predominan las áreas de conocimiento de más estudio en Colombia, tales como:
Economía, administración, contaduría y afines
Ingeniería, arquitectura, urbanismo y afines
Con la primera categoría llevándose el mayor porcentaje en cada uno e los cluster, por lo cual solo se rescata que en las agrupaciones de la uno a la 5 no se vieron áreas que son predominantes hoy en día como las matemáticas y ciencias naturales
####3 para la variable área del metodología
<- ggplot(mydata_clustered, aes(x =metodologia, fill = metodologia)) +
p geom_bar(aes(y = (..count..)/sum(..count..)))+theme_minimal()+
facet_wrap(~ cluster)+labs(y = "Porcentaje", x = "Metodología",
title = "Facetado por Cluster")+
theme(legend.position = "none",axis.text.x = element_blank())
%>% ggplotly() p
Era de esperarse que la presencialidad es la metodología por excelencia en las agrupaciones, pero pensamos que la segunda iba a ser la virtualidad debido a la época de globalización actual, pero esta se ve desplazada por la distancia tradicional de estudiar independientemente para evaluarse fines de semana, siendo sinceros, esta metodología es muy prometedora dado a la precariedad de los Colombianos a la hora de estudiar o prepararse ya que tienen obligaciones como familias o trabajos que los impiden por lo cual es mejor a distancia y evaluaciones presenciales a la hora de obtener certificados o títulos.