02_auditoria_datos.REl propósito de 02_auditoria_datos.R es evaluar la
estructura, calidad, consistencia, cobertura temporal y viabilidad
longitudinal de la base histórica consolidada de Saber 11 antes de
realizar cualquier proceso de limpieza, imputación, homologación o
modelado.
El principio metodológico central es:
La auditoría identifica problemas y genera evidencia para tomar decisiones posteriores; no modifica la información original.
Por tanto, en este script es correcto crear objetos temporales de diagnóstico —por ejemplo, representaciones numéricas de puntajes— siempre que no se sobrescriban las variables originales ni se guarde una base “corregida”.
La base consolidada contiene:
Todas las variables fueron cargadas como tipo
character.
Esto incluye:
Desde el punto de vista de auditoría, trabajar inicialmente con las variables como texto es útil porque permite observar la representación original antes de realizar coerciones de tipo.
La base tiene una escala suficientemente grande como para requerir una estrategia de procesamiento reproducible y eficiente. El formato Parquet es apropiado para esta dimensión.
Sin embargo, el hecho de que los puntajes sean inicialmente
character obliga a auditar:
Se auditaron las variables técnicas:
:id:version:created_at:updated_atPara :id se obtuvo:
Esto demuestra que el identificador técnico :id es único
a nivel de fila.
No demuestra que no existan duplicados semánticos.
Esta distinción es importante porque posteriormente aparecen
registros con el mismo estu_consecutivo pero distintos
:id. Por ejemplo, en los siete casos con decimal mediante
coma se observa que:
SB11201120553138
aparece repetido varias veces con identificadores técnicos Socrata distintos.
Por consiguiente:
La unicidad de
:idgarantiza unicidad técnica de las filas, pero no garantiza unicidad lógica de estudiante, presentación, colegio o evento de evaluación.
Una auditoría adicional de duplicación semántica debe utilizar claves
sustantivas, no :id.
Las mayores proporciones de faltantes corresponden a:
| Variable | Faltantes | % |
|---|---|---|
punt_sociales_ciudadanas |
2.609.523 | 36,7 |
punt_c_naturales |
2.609.523 | 36,7 |
punt_lectura_critica |
2.609.523 | 36,7 |
punt_global |
2.609.523 | 36,7 |
cole_bilingue |
916.870 | 12,9 |
fami_estratovivienda |
218.219 | 3,07 |
fami_educacionmadre |
212.826 | 2,99 |
fami_educacionpadre |
212.423 | 2,99 |
fami_tieneinternet |
191.624 | 2,70 |
fami_tienecomputador |
151.217 | 2,13 |
fami_tieneautomovil |
134.769 | 1,90 |
cole_caracter |
110.212 | 1,55 |
cole_codigo_icfes |
23.733 | 0,33 |
desemp_ingles |
5.410 | 0,08 |
punt_ingles |
4.179 | 0,06 |
punt_matematicas |
0 | 0 |
Los 2.609.523 faltantes de:
no corresponden a un patrón aleatorio de datos perdidos.
Se concentran completamente en los periodos anteriores a 2014-2.
Por tanto, se trata fundamentalmente de una ausencia estructural derivada del esquema de evaluación disponible en la fuente histórica, no de missing data ordinario que deba imputarse.
La base contiene 23 periodos entre 2010 y 2022.
Se observa una alternancia muy marcada entre aplicaciones pequeñas y grandes.
Ejemplos:
Posteriormente aparecen aplicaciones extremadamente grandes:
Mientras varias aplicaciones terminadas en 1 presentan
solo entre aproximadamente 13.000 y 32.000 estudiantes.
El código temporal no puede utilizarse ingenuamente como si cada fila del tiempo representara la misma población objetivo.
Existe una fuerte estructura asociada a:
Esto será fundamental al construir el componente longitudinal.
Se evaluó por periodo la disponibilidad de:
punt_sociales_ciudadanaspunt_c_naturalespunt_lectura_criticapunt_globalResultado:
Los cuatro puntajes están ausentes en el 100 % de los registros.
Los cuatro puntajes están presentes en el 100 % de los registros.
Además, las máscaras de faltantes son exactamente iguales.
La clasificación empírica resultante fue:
Esquema anterior a 2014-2Esquema desde 2014-2No se detectaron periodos híbridos.
Existe una ruptura estructural perfectamente definida en la disponibilidad de pruebas a partir de 2014-2.
Esto justifica distinguir al menos dos regímenes para fines descriptivos y de ingeniería de datos.
Sin embargo, esta evidencia por sí sola no establece equivalencia ni no equivalencia psicométrica de Matemáticas e Inglés entre ambos regímenes.
punt_matematicas presenta:
punt_ingles está disponible prácticamente en toda la
serie, con faltantes pequeños en algunos periodos recientes.
Ejemplos:
La mayor proporción observada es aproximadamente 0,52 %.
Matemáticas e Inglés son las dos variables de puntaje con mayor cobertura temporal.
Esto las convierte en candidatas naturales para estudiar evolución longitudinal.
Pero:
Disponibilidad longitudinal no equivale a comparabilidad longitudinal de escala.
Antes de utilizarlas directamente como una serie homogénea deben estudiarse:
Se detectaron siete registros aparentemente “no numéricos” cuando se utilizó una expresión regular que solo admitía punto decimal.
Todos correspondían a 20112.
Ejemplos:
35,236,4469,2743,4831,8742,5842,76Al permitir punto o coma decimal, no quedó ningún formato numérico no reconocido.
La conversión temporal:
"," → "." → numeric
no introdujo nuevos NA.
La representación de puntajes puede normalizarse posteriormente de manera determinista sin pérdida observable de información.
Esa normalización pertenece al script de limpieza, no a la auditoría.
Los primeros periodos presentan un predominio casi completo de valores decimales:
| Periodo | Matemáticas decimal | Inglés decimal |
|---|---|---|
| 20101 | 99,6 % | 99,6 % |
| 20102 | ~100 % | 99,9 % |
| 20111 | 97,7 % | 99,8 % |
Desde 20112, los puntajes se representan casi exclusivamente mediante enteros.
Existe una clara modificación en la representación numérica alrededor de 2011-2.
Esta transición debe documentarse porque implica que la precisión almacenada cambia históricamente.
No significa necesariamente que la variable subyacente haya cambiado de constructo o escala psicométrica.
La evidencia permite afirmar:
La representación registrada del puntaje cambia sustancialmente entre los primeros periodos y los siguientes.
Los valores fuera de 0–100 aparecen exclusivamente entre 20101 y 20141.
Número por periodo:
| Periodo | Casos | % |
|---|---|---|
| 20101 | 35 | 0,0840 |
| 20102 | 115 | 0,0183 |
| 20111 | 134 | 0,406 |
| 20112 | 309 | 0,0500 |
| 20121 | 102 | 0,265 |
| 20122 | 215 | 0,0335 |
| 20131 | 274 | 0,779 |
| 20132 | 28 | 0,0051 |
| 20141 | 86 | 0,345 |
No se detectaron valores de Matemáticas menores que cero.
Los extremos alcanzan:
Principalmente se observa el valor exacto -1.
Ejemplos:
Solo se concentra significativamente en 20102:
Valores exactos:
Todos están asociados a nivel de desempeño B+.
No es correcto reemplazar automáticamente estos valores por
NA o truncarlos a 100.
Los resultados sugieren que los periodos antiguos pueden utilizar reglas o escalas de reporte distintas.
Especialmente:
Por tanto, no parecen simples errores tipográficos aislados.
La auditoría permite concluir:
Antes de 2014-2 existen valores legítimamente almacenados fuera del intervalo 0–100 que requieren interpretación histórica o documental antes de ser transformados.
No permite concluir todavía que todas las escalas sean psicométricamente incompatibles.
La tabla regimenes_observados combina:
Se observan tres fenómenos distintos:
20101–20111: predominio decimal.
Desde 20112: predominio entero.
Hasta 20141:
Desde 20142 sí aparecen.
Hasta 20141 existen valores fuera de 0–100.
Desde 20142 todos los puntajes de Matemáticas e Inglés observados se encuentran entre 0 y 100.
Hay suficiente evidencia para tratar la historia de Saber 11 como una base con cambios estructurales temporales, en lugar de una única tabla completamente homogénea.
El script define:
20101, 20102, 20111, 20112, 20121, 20122, 20131, 20132 y 20141.
Variables de puntaje comunes disponibles:
20142, 20151, 20152, 20161, 20162, 20171, 20172, 20181, 20191, 20194, 20201, 20211, 20221 y 20224.
Variables:
Si el objetivo longitudinal requiere cubrir 2010–2022, Matemáticas e Inglés ofrecen la mayor cobertura potencial.
Si requiere utilizar todas las áreas modernas, el horizonte efectivo comienza en 20142.
La composición del calendario cambia drásticamente entre periodos.
Las aplicaciones masivas terminadas históricamente en 2
y posteriormente 4 están dominadas casi completamente por
calendario A.
Ejemplos:
En cambio, numerosas aplicaciones terminadas en 1 están
dominadas por B o presentan mezcla A/B.
Ejemplos:
Una diferencia entre la media global de dos aplicaciones consecutivas puede reflejar en gran medida un cambio de población y no una evolución temporal del rendimiento.
Por tanto:
No debe interpretarse automáticamente la diferencia de medias entre periodos administrativos consecutivos como cambio académico longitudinal.
Las diferencias entre calendarios son muy importantes.
Ejemplo 20101:
Ejemplo 20121:
Este patrón aparece repetidamente.
Las distribuciones de puntajes están fuertemente asociadas con la composición institucional y de calendario.
Las medias brutas del periodo mezclan:
Por consiguiente, la comparación temporal debe controlar o estratificar estas dimensiones.
La composición por jornada también varía considerablemente.
Las categorías incluyen:
Las aplicaciones pequeñas de calendario B suelen tener una proporción muy elevada de jornada COMPLETA.
Ejemplo 20161:
Mientras las aplicaciones masivas A presentan distribuciones muy distintas.
También se observan importantes diferencias descriptivas.
Por ejemplo, en 20151 calendario B:
La jornada no debe tratarse como una característica irrelevante en análisis longitudinales o predictivos.
No obstante, estas diferencias son descriptivas. No permiten inferir causalidad de la jornada sobre el resultado.
La distribución entre establecimientos:
también depende marcadamente del tipo de aplicación.
Las aplicaciones masivas A están dominadas por establecimientos oficiales.
Ejemplos:
En cambio:
En las aplicaciones masivas calendario A existe una diferencia descriptiva persistente entre establecimientos oficiales y no oficiales.
Ejemplo 20224:
La naturaleza institucional constituye otro componente importante del cambio de composición temporal.
Esto refuerza la necesidad de evitar comparaciones brutas sin controlar características institucionales.
Se construyeron estratos mediante:
calendario × naturaleza × jornada.
Algunas combinaciones tienen soporte durante casi toda la serie.
Ejemplos:
Existen estratos institucionales con suficiente persistencia temporal como para permitir análisis estratificados.
Otros estratos aparecen esporádicamente y no deberían utilizarse como eje principal de comparación longitudinal.
Se calculó la distancia de variación total entre periodos consecutivos.
Valores cercanos a:
Se observan valores extremadamente altos.
Ejemplos:
En contraste:
Este es uno de los hallazgos más importantes de toda la auditoría.
Los periodos consecutivos en la codificación administrativa no necesariamente representan observaciones sucesivas de la misma población institucional.
En muchos casos, las poblaciones institucionales son casi completamente distintas.
Considerando cole_codigo_icfes válido:
Además:
La base sí posee una estructura longitudinal institucional considerable.
No es un conjunto puramente transversal de aplicaciones independientes.
Hay miles de colegios observados repetidamente.
Sin embargo, la persistencia depende fuertemente de la familia de aplicación.
El primer cálculo de continuidad produjo resultados imposibles:
colegios_comunes = 0 en todas las transiciones;colegios_salen = 1;colegios_entran = 1.Esto contradecía tanto los datos como la persistencia institucional previamente observada.
El diagnóstico verificó:
cole_codigo_icfes es character;La solución fue utilizar explícitamente:
base::intersect()base::setdiff()base::union()base::length()y añadir comprobaciones algebraicas.
Este episodio debe conservarse como parte de la trazabilidad de la auditoría.
El script no solo audita los datos: también valida los propios cálculos utilizados en la auditoría.
La corrección posterior produjo resultados coherentes.
Después de la corrección se observaron resultados plausibles.
Ejemplos:
En cambio:
Esto confirma que la secuencia cronológica simple mezcla diferentes poblaciones de aplicación.
Los periodos deben organizarse longitudinalmente considerando la familia administrativa y la población institucional, no únicamente por orden de fecha.
Se compararon las 253 combinaciones posibles de los 23 periodos.
Este análisis revela una estructura muy clara.
Ejemplos:
Ejemplos:
Y numerosos cruces presentan Jaccard inferior a 0,01.
Este análisis respalda fuertemente la existencia de secuencias históricas diferentes con mayor coherencia interna.
No debe interpretarse como prueba psicométrica de compatibilidad, sino como evidencia institucional de continuidad.
El script define provisionalmente:
20102 → 20112 → 20122 → 20132 → 20142 → 20152 → 20162 → 20172 → 20194 → 20224
Jaccard consecutivo:
La continuidad institucional es muy elevada durante gran parte de la secuencia.
Incluso los valores menores de las últimas transiciones siguen siendo muy superiores a los cruces entre familias diferentes.
Esta secuencia constituye una candidata muy sólida para construir un panel longitudinal institucional.
Se define provisionalmente:
20101 → 20111 → 20121 → 20131 → 20141 → 20151 → 20161 → 20171 → 20191
Jaccard:
También existe continuidad dentro de esta familia, aunque menos estable.
La transición 20151 → 20161 constituye una ruptura importante:
Después, la continuidad entre:
es nuevamente muy elevada.
Las secuencias masiva y reducida no sustituyen la clasificación por régimen de evaluación.
Son dimensiones diferentes.
Un periodo puede pertenecer simultáneamente a:
Por ejemplo, la secuencia masiva cruza la ruptura 20141–20142.
Por tanto, deben mantenerse separados al menos cuatro ejes:
El último dígito permite reconocer tres códigos administrativos:
124El patrón empírico es evidente.
Generalmente:
Hasta 2017:
Desde 2019:
también dominadas por calendario A.
El código de aplicación contiene información estructural relevante y debe conservarse explícitamente como variable de metadatos.
No debe reducirse el periodo solamente al año.
Se evaluó el número de estudiantes por colegio.
Las aplicaciones masivas presentan medianas aproximadas de:
Ejemplos:
Las aplicaciones reducidas suelen presentar tamaños menores.
Ejemplos:
Se evaluó el impacto de excluir colegios-periodo con:
En muchas aplicaciones masivas, excluir colegios con menos de 5 alumnos elimina pocos estudiantes.
Ejemplo:
Sin embargo, en periodos reducidos recientes el efecto institucional sería considerable.
colegios <5: 27,2 %
estudiantes: 1,83 %
colegios <10: 39,8 %
estudiantes: 5,62 %
colegios <5: 23,2 %
estudiantes: 2,46 %
colegios <10: 40,9 %
estudiantes: 8,06 %
No debe imponerse todavía un umbral único de forma automática.
El umbral debe depender del propósito estadístico.
Para estimar medias institucionales, colegios con uno o muy pocos estudiantes producen estimadores muy inestables.
Pero excluirlos puede modificar fuertemente la cobertura institucional.
La decisión debe realizarse en la fase de construcción del panel o modelado.
cole_codigo_icfesSolo tres periodos presentan registros sin código ICFES:
| Periodo | Faltantes | % |
|---|---|---|
| 20122 | 23.710 | 3,69 |
| 20112 | 21 | 0,0034 |
| 20224 | 2 | 0,000188 |
El problema está prácticamente concentrado en 20122.
Los 23.710 registros sin identificador institucional no pueden incorporarse directamente a un panel por colegio.
Resolver o documentar este problema será una tarea central de
03_limpieza_imputacion.R.
Los 23.710 registros sin código se concentran en:
La distribución territorial es amplia.
Principales departamentos:
No parece un problema concentrado en una única institución o región.
La estructura es coherente con la composición general de una aplicación masiva.
Esto sugiere un problema sistemático de identificación en esa extracción histórica más que unos pocos registros aislados.
Se construyó una referencia histórica basada en:
Resultado:
Todos los establecimientos aparecen en alguna forma dentro de la historia disponible.
Sin embargo, utilizar toda la historia produce mucha ambigüedad porque un mismo:
nombre + municipio + departamento
puede aparecer relacionado con varios códigos ICFES a lo largo del tiempo.
Por tanto, el nombre institucional por sí solo no es una llave suficientemente estable para una imputación general.
Entre los 23.710 registros:
Y algunos establecimientos presentan hasta:
La ambigüedad no es marginal.
Una regla basada únicamente en la correspondencia histórica global produciría un riesgo considerable de asignación incorrecta.
Al restringir la referencia a:
los resultados mejoran:
La proximidad temporal aumenta considerablemente la unicidad.
Esto respalda la hipótesis de que cambios históricos más distantes del código ICFES generan gran parte de la ambigüedad.
Sin embargo:
49,6 % potencialmente recuperable no significa 49,6 % automáticamente imputable.
La regla debe validarse antes de utilizarse.
Se utilizaron:
como aplicaciones masivas inmediatamente alrededor de 20122.
Resultado:
Existe un grupo considerable de registros para los cuales la continuidad temporal ofrece evidencia fuerte.
Pero sigue sin ser correcto modificar la base todavía.
El último diagnóstico refina la estrategia.
Se identifica el conjunto exacto de códigos que aparece simultáneamente en 20112 y 20132 para un mismo:
Resultado:
Esta es la evidencia diagnóstica más prometedora obtenida para una futura reconstrucción del identificador.
Aproximadamente la mitad de los registros faltantes tienen un código longitudinal único común antes y después.
La diferencia respecto al cálculo anterior de 42,5 % muestra además que la definición de la regla importa.
La auditoría debe terminar aquí.
No se debe ejecutar todavía:
cole_codigo_icfes <- ...
ni guardar un identificador reconstruido.
La regla debe trasladarse a 03_limpieza_imputacion.R,
donde debe validarse mediante backtesting.
La estrategia metodológicamente adecuada sería:
cole_codigo_icfes sí esté
observado.Por ejemplo:
codigo_icfes_originalcodigo_icfes_reconstruidofuente_codigoconfianza_reconstruccionNunca conviene sobrescribir silenciosamente el código original.
La auditoría revela que la base histórica de Saber 11 no debe ser concebida simplemente como:
estudiantes × años
sino como una colección de aplicaciones con diferencias estructurales importantes.
Los principales ejes encontrados son:
Algunos periodos comparten más del 90 % de su estructura institucional, mientras otros tienen intersección prácticamente nula.
20122 presenta un problema específico de código ICFES faltante.
Existen cambios históricos en:
La auditoría permite afirmar con soporte empírico que:
La base consolidada contiene 7.109.704 registros y 55 variables.
:id es único como identificador técnico de
fila.
Esto no garantiza ausencia de duplicación semántica.
Existe una ruptura clara en 2014-2 en la disponibilidad de Sociales, Naturales, Lectura Crítica y Puntaje Global.
Matemáticas está completa en toda la fuente.
Inglés tiene una cobertura prácticamente completa.
Existen siete representaciones decimales mediante coma que pueden convertirse sin pérdida.
La precisión registrada cambia de valores mayoritariamente decimales a enteros alrededor de 2011-2.
Antes de 2014-2 aparecen valores de Matemáticas >100 e Inglés <0 o >100.
Desde 2014-2 los puntajes observados de Matemáticas e Inglés se mantienen dentro de 0–100.
La población de las aplicaciones cambia sustancialmente según calendario, naturaleza y jornada.
Los periodos consecutivos no representan necesariamente poblaciones comparables.
Existe una secuencia histórica de aplicaciones masivas con alta continuidad institucional.
Existe una segunda secuencia reducida con continuidad interna importante, aunque más irregular.
Hay suficiente repetición institucional para construir un panel longitudinal de colegios.
20122 presenta 23.710 registros sin código ICFES.
La intersección temporal 20112–20132 permite identificar un único código común para 11.919 de ellos, aproximadamente 50,3 %.
La auditoría no permite afirmar todavía que:
-1 de Inglés deba convertirse automáticamente en
NA;03_limpieza_imputacion.REl siguiente script debería encargarse de:
Convertir coma decimal a punto y luego a numeric.
No modificar valores extremos sin una regla documental o metodológica explícita.
Implementar una estrategia de reconstrucción únicamente después de backtesting.
Crear indicadores de trazabilidad para cualquier dato reconstruido.
Auditar claves como:
estu_consecutivo;Normalizar categorías institucionales sin destruir los valores originales.
04_construccion_panel.REl panel de colegio debe construirse después de la limpieza.
La clave básica sería:
cole_codigo_icfes + periodo
pero debe incorporar una variable explícita de:
Las agregaciones deben considerar:
Los tamaños pequeños de colegio-periodo deben conservarse inicialmente y marcarse con indicadores de estabilidad, en vez de eliminarlos de manera automática.
Para una primera versión científicamente defendible, la secuencia masiva tiene importantes ventajas:
20102 → 20112 → 20122 → 20132 → 20142 → 20152 → 20162 → 20172 → 20194 → 20224
Presenta:
Pero cruza la reforma de 2014-2.
Por tanto, el modelo debe incorporar explícitamente el cambio de régimen o restringirse a un horizonte homogéneo cuando la variable objetivo lo requiera.
Para utilizar las seis áreas modernas, una ventana especialmente coherente sería:
20142 → 20152 → 20162 → 20172 → 20194 → 20224
aunque debe seguir evaluándose el cambio de aplicación
2 → 4.
El script cumple una función importante de reproducibilidad.
No se limita a obtener summary().
Construye evidencia sobre:
Además, detectó y corrigió un error en el propio cálculo de continuidad.
Ese comportamiento es metodológicamente positivo porque convierte el pipeline en un proceso auditable.
La arquitectura conceptual de 02_auditoria_datos.R es
adecuada.
El script está cumpliendo el propósito correcto:
RAW → AUDITORÍA → evidencia para decisiones posteriores
y no:
RAW → correcciones silenciosas → dataset final.
Su mayor fortaleza es haber identificado que el principal problema del proyecto no es simplemente “limpiar NA”.
El problema real es estructural:
Saber 11 contiene diferentes familias de aplicación, poblaciones institucionales, regímenes de evaluación y patrones históricos de identificación que deben modelarse explícitamente para construir un dataset longitudinal científicamente válido.
La base consolidada posee calidad suficiente para continuar con el proyecto, pero no debe modelarse directamente en su estado raw.
La auditoría demuestra una estructura longitudinal real a nivel institucional, particularmente fuerte dentro de la secuencia de aplicaciones masivas.
Al mismo tiempo, identifica cuatro riesgos que deben resolverse antes del modelado:
:id.La conclusión metodológica principal es:
Sí existe una base sólida para construir un panel longitudinal de colegios, pero ese panel debe derivarse mediante reglas explícitas de régimen, familia de aplicación, continuidad institucional, trazabilidad del código ICFES y tamaño efectivo del colegio-periodo.
Por ello, 02_auditoria_datos.R debe cerrarse como un
script puramente diagnóstico.
La siguiente etapa lógica es 03_limpieza_imputacion.R,
donde las decisiones detectadas en esta auditoría deberán convertirse en
reglas reproducibles, validadas y documentadas antes de construir el
panel definitivo.