Portada
Universidad Santo Tomás
Facultad de Estadística
Análisis del tiempo de desplazamiento hacia instituciones
educativas en Colombia:
muestreo estratificado y diseño
experimental basado en ANOVA
Diseño de Experimentos
Autoras:
Paula Martínez • Lina Sogamoso
Profesor: Javier Sierra
2026
Resumen ejecutivo
Este trabajo integra una fase de muestreo estadístico y una
fase de análisis comparativo utilizando datos reales de la
Encuesta Nacional de Calidad de Vida (ENCV) 2024 del DANE. En
la primera fase se construyó un diseño de muestreo
estratificado por sexo y grupo de edad con el objetivo de
estimar la proporción de personas que actualmente estudian. Se
calculó el tamaño de muestra bajo un nivel de confianza del
95% y un margen de error del 3%, se realizó asignación
proporcional por estrato, selección aleatoria dentro de cada
grupo y construcción de pesos muestrales. La inferencia se
formalizó mediante el paquete survey, obteniendo
estimaciones e intervalos de confianza consistentes con la
estructura del diseño.
En la segunda fase se desarrolló un análisis observacional con estructura análoga de bloqueo, donde la variable respuesta fue el tiempo de desplazamiento a la institución educativa, el factor principal de comparación fue la jornada y los bloques se definieron con la combinación sexo–grupo de edad. El ANOVA mostró diferencias significativas entre jornadas y efecto de bloque, complementado con comparaciones múltiples de Tukey, verificación de supuestos y análisis aproximado de potencia. El principal aporte del estudio es la articulación coherente entre ambas fases, utilizando en la segunda fase la misma estructura de heterogeneidad identificada en la primera.
Hallazgos clave
| Indicador | Descripción |
|---|---|
| Base analítica | ENCV 2024 integrada con módulos de educación, hogar, TIC y diseño muestral. |
| Fase I | Muestreo estratificado con estratos construidos por sexo y grupo de edad. |
| Fase II | ANOVA con bloqueo para comparar jornadas y controlar heterogeneidad. |
| Salida principal | Resultados completamente reproducibles desde el código del informe. |
Introducción y Objetivos
Introducción
En estadística aplicada, el muestreo y el análisis comparativo de grupos suelen enseñarse como temas separados, aunque en la práctica ambos responden a una misma lógica: comprender poblaciones heterogéneas con herramientas rigurosas de inferencia. Este informe propone una integración de ambas perspectivas utilizando datos reales de la Encuesta Nacional de Calidad de Vida (ENCV) 2024 del DANE. En una primera fase se implementa un diseño de muestreo estratificado para estimar la proporción de personas que actualmente estudian. En una segunda fase se desarrolla un análisis observacional con estructura análoga de bloqueo para estudiar diferencias en el tiempo de desplazamiento a la institución educativa según la jornada académica.
El documento está escrito de manera reproducible en R Markdown y busca no solo mostrar resultados, sino también justificar cada decisión metodológica. La idea central es que las variables que ayudan a controlar heterogeneidad en la fase de muestreo también pueden reaprovecharse en la fase comparativa, fortaleciendo la coherencia global del estudio.
Objetivos de aprendizaje del documento
Al finalizar este informe, la persona lectora debería poder:
- Justificar el uso de un diseño de muestreo estratificado en una base poblacional real.
- Calcular un tamaño de muestra para estimar una proporción con población finita.
- Construir pesos muestrales e implementar
inferencia formal con el paquete
survey. - Plantear un análisis observacional con estructura análoga de bloqueo usando ANOVA.
- Interpretar resultados, supuestos, comparaciones múltiples y limitaciones de manera crítica.
Objetivos
Objetivo general
Evaluar la capacidad de articular los conceptos de muestreo estadístico y análisis comparativo en la solución de un problema real, empleando datos observacionales de la ENCV 2024 y evidenciando dominio técnico, pensamiento crítico y habilidades de comunicación científica.
Objetivos específicos
- Diseñar y justificar un plan de muestreo estratificado con base en variables demográficas relevantes.
- Calcular el tamaño de muestra y estimar la proporción de
personas que actualmente estudian, incorporando pesos
muestrales e inferencia con
survey. - Plantear un análisis observacional con estructura análoga de bloqueo, usando jornada como factor principal y sexo–grupo de edad como bloques.
- Realizar ANOVA, verificar supuestos del modelo, aplicar comparaciones múltiples y analizar de forma aproximada la potencia del diseño.
- Integrar ambas fases en un producto reproducible, bien estructurado y metodológicamente coherente.
Fundamentos teóricos
Fundamentos teóricos del diseño muestral
El análisis desarrollado en la Fase I se enmarca dentro del enfoque de inferencia estadística para poblaciones finitas, cuyo objetivo es estimar parámetros poblacionales a partir de una muestra seleccionada mediante un esquema probabilístico. En este contexto, la población de interés está conformada por los individuos incluidos en la Encuesta Nacional de Calidad de Vida (ENCV) 2024, lo que implica que el muestreo se realiza sin reemplazo.
Inferencia en poblaciones finitas
Sea \(N\) el tamaño de la población y \(n\) el tamaño de la muestra. Uno de los parámetros de interés es la proporción poblacional \(p\), definida como:
\[ p = \frac{1}{N} \sum_{i=1}^{N} y_i \]
donde \(y_i\) es una variable indicadora que toma el valor 1 si el individuo presenta la característica de interés, por ejemplo estar estudiando, y 0 en caso contrario.
El estimador muestral de esta proporción está dado por:
\[ \hat{p} = \frac{1}{n} \sum_{i=1}^{n} y_i \]
Bajo muestreo aleatorio simple sin reemplazo, la varianza del estimador es:
\[ \text{Var}(\hat{p}) = \frac{p(1-p)}{n} \left( \frac{N - n}{N - 1} \right) \]
donde el término:
\[ \left( \frac{N - n}{N - 1} \right) \]
corresponde a la corrección por población finita (CPF), la cual ajusta la varianza del estimador cuando la fracción de muestreo \(n/N\) no es despreciable.
A partir de esta varianza, se construyen intervalos de confianza para \(p\) mediante:
\[ \hat{p} \pm z_{\alpha/2} \sqrt{\text{Var}(\hat{p})} \]
Muestreo estratificado
Con el fin de mejorar la precisión de las estimaciones, se emplea un diseño de muestreo estratificado. En este esquema, la población se divide en \(H\) estratos mutuamente excluyentes, definidos en este estudio por la combinación de sexo y grupo de edad.
El estimador de la proporción bajo muestreo estratificado es:
\[ \hat{p}_{st} = \sum_{h=1}^{H} W_h \hat{p}_h \]
donde:
- \(W_h = \frac{N_h}{N}\) es el peso del estrato \(h\),
- \(\hat{p}_h\) es la proporción muestral dentro del estrato,
- \(N_h\) es el tamaño poblacional del estrato.
La varianza de este estimador está dada por:
\[ \text{Var}(\hat{p}_{st}) = \sum_{h=1}^{H} W_h^2 \frac{p_h(1-p_h)}{n_h} \left( \frac{N_h - n_h}{N_h - 1} \right) \]
Este diseño reduce la varianza del estimador cuando existe heterogeneidad entre los estratos y homogeneidad dentro de ellos.
Pesos muestrales
En encuestas complejas como la ECV, cada observación de la muestra representa un número determinado de individuos en la población. Esto se logra mediante el uso de pesos muestrales o factores de expansión.
Si \(w_i\) es el peso asociado a la unidad \(i\), el estimador ponderado de la proporción es:
\[ \hat{p}_w = \frac{\sum_{i \in s} w_i y_i}{\sum_{i \in s} w_i} \]
donde \(s\) representa la muestra seleccionada.
El uso de estos pesos permite obtener estimaciones insesgadas y representativas, teniendo en cuenta el diseño muestral complejo.
En conjunto, estos fundamentos teóricos sustentan la elección del diseño muestral estratificado, así como los procedimientos de estimación e inferencia implementados en la Fase I del estudio.
Fundamentos teóricos del análisis de varianza
La Fase II del estudio se fundamenta en el análisis de varianza (ANOVA), una técnica estadística utilizada para comparar las medias de múltiples grupos y determinar si existen diferencias significativas entre ellos.
Modelo lineal
El modelo general del ANOVA con un factor y bloques puede expresarse como:
\[ Y_{ij} = \mu + \tau_i + \beta_j + \varepsilon_{ij} \]
donde:
- \(Y_{ij}\): valor observado de la variable respuesta, tiempo de desplazamiento,
- \(\mu\): media general,
- \(\tau_i\): efecto del tratamiento, jornada académica,
- \(\beta_j\): efecto del bloque, estratos de sexo y edad,
- \(\varepsilon_{ij}\): error aleatorio.
Hipótesis
El ANOVA evalúa la hipótesis:
\[ H_0: \tau_1 = \tau_2 = \cdots = \tau_k \]
frente a la alternativa:
\[ H_1: \text{al menos una media es diferente} \]
Descomposición de la varianza
La variabilidad total se descompone como:
\[ \text{SST} = \text{SS}_{\text{tratamiento}} + \text{SS}_{\text{bloques}} + \text{SS}_{\text{error}} \]
donde cada componente representa la variabilidad explicada por los factores y la variabilidad residual.
El estadístico de prueba es:
\[ F = \frac{\text{MS}_{\text{tratamiento}}}{\text{MS}_{\text{error}}} \]
donde \(\text{MS}\) corresponde a las medias cuadráticas.
Supuestos del modelo
Para que el ANOVA sea válido, se deben cumplir los siguientes supuestos:
- Normalidad de los errores:
\[ \varepsilon_{ij} \sim N(0, \sigma^2) \]
- Homogeneidad de varianzas:
\[ \text{Var}(\varepsilon_{ij}) = \sigma^2 \]
- Independencia de las observaciones.
Comparaciones múltiples
Cuando el ANOVA resulta significativo, se emplean métodos de comparaciones múltiples como el procedimiento de Tukey, que permite identificar qué pares de medias difieren entre sí, controlando el error tipo I.
Consideraciones en datos observacionales
En este estudio, los datos provienen de una encuesta y no de un experimento controlado. Por esta razón, el ANOVA se utiliza como una herramienta de análisis comparativo, y sus resultados deben interpretarse en términos de asociación y no de causalidad.
Estos fundamentos teóricos sustentan el análisis realizado en la Fase II, en el cual se comparan los tiempos de desplazamiento entre jornadas académicas, incorporando los estratos definidos en la Fase I como bloques para controlar la heterogeneidad.
Enfoque del análisis
Este informe se desarrolló con datos reales de la ENCV 2024. Primero se construyó una base analítica uniendo varios módulos: educación, características y composición del hogar, tecnologías de información y comunicación, y variables del diseño muestral. Luego se realizó un análisis exploratorio de datos para describir la estructura de la base y la distribución de las variables principales. A partir de allí se implementó el diseño muestral y, posteriormente, el análisis comparativo. Esta secuencia busca que cada decisión metodológica surja del conocimiento previo de los datos y no de una aplicación mecánica de técnicas estadísticas.
Fuente de datos y procedencia
La fuente de información utilizada fue la Encuesta Nacional de Calidad de Vida 2024 (ENCV 2024) del DANE, una fuente pública, verificable y adecuada para fines académicos. En el desarrollo del trabajo se emplearon los módulos de educación, características y composición del hogar, TIC y variables de diseño muestral. La base consolidada fue construida mediante unión por identificadores de directorio, secuencia de encuesta, secuencia de persona y orden.
| elemento | detalle |
|---|---|
| Fuente | DANE – ENCV 2024 |
| Unidad de análisis | Individuo |
| Fase I | Estimación de proporción |
| Fase II | Comparación de medias |
Carga, unión y preparación de datos
carpeta <- "C:/Users/paula/Downloads/Diseño de experimentos"
educacion <- read_delim(file.path(carpeta,"Educación.CSV"),delim=";",show_col_types=FALSE) %>% clean_names()
hogar <- read_delim(file.path(carpeta,"Características y composición del hogar.CSV"),delim=";",show_col_types=FALSE) %>% clean_names()
tic <- read_delim(file.path(carpeta,"Tecnologías de información y comunicación.CSV"),delim=";",show_col_types=FALSE) %>% clean_names()
diseno <- read_delim(file.path(carpeta,"Variables diseño muestral.CSV"),delim=";",show_col_types=FALSE) %>% clean_names()
educacion2 <- educacion %>% select(directorio,secuencia_encuesta,secuencia_p,orden,fex_c,p8586,p8587,p8587s1,p1101,p6167)
hogar2 <- hogar %>% select(directorio,secuencia_encuesta,secuencia_p,orden,p6020,p6040,p756s1)
tic2 <- tic %>% select(directorio,secuencia_encuesta,secuencia_p,orden,p1084)
diseno2 <- diseno %>% select(directorio,secuencia_p,orden,mpio,estrato2020,bloque,fex_c)
base <- educacion2 %>% left_join(hogar2,by=c("directorio","secuencia_encuesta","secuencia_p","orden")) %>% left_join(tic2,by=c("directorio","secuencia_encuesta","secuencia_p","orden")) %>% left_join(diseno2 %>% select(-fex_c),by=c("directorio","secuencia_p","orden")) %>% filter(!is.na(p8586),!is.na(p6020),!is.na(p6040)) %>% mutate(estudia=case_when(p8586==1~1,p8586==2~0,TRUE~NA_real_),sexo=case_when(p6020==1~"Hombre",p6020==2~"Mujer",TRUE~NA_character_),grupo_edad=case_when(p6040>=5 & p6040<=17~"5-17",p6040>=18 & p6040<=28~"18-28",p6040>=29 & p6040<=59~"29-59",p6040>=60~"60+",TRUE~NA_character_),estrato_f1=paste(sexo,grupo_edad,sep=" - "),usa_internet=case_when(p1084 %in% c(1,2,3,4)~1,is.na(p1084)~NA_real_,TRUE~0))
dim_base <- data.frame(filas=nrow(base),columnas=ncol(base))
tabla_bonita(dim_base,"Dimensión de la base consolidada",0)| filas | columnas |
|---|---|
| 214607 | 22 |
La base consolidada quedó conformada por 214,607 observaciones y 22 variables. Esta base representa el punto de partida tanto para la fase de muestreo como para la fase de análisis comparativo.
Análisis exploratorio de datos
Resumen descriptivo inicial
tabla_sexo <- as.data.frame(table(base$sexo)); names(tabla_sexo) <- c("sexo","frecuencia")
tabla_estudia <- as.data.frame(table(base$estudia)); names(tabla_estudia) <- c("estudia","frecuencia"); tabla_estudia$estudia <- c("No estudia","Estudia")
tabla_grupo_edad <- as.data.frame(table(base$grupo_edad)); names(tabla_grupo_edad) <- c("grupo_edad","frecuencia")
tabla_bonita(tabla_sexo,"Distribución por sexo",0)| sexo | frecuencia |
|---|---|
| Hombre | 103344 |
| Mujer | 111263 |
| estudia | frecuencia |
|---|---|
| No estudia | 162112 |
| Estudia | 52495 |
| grupo_edad | frecuencia |
|---|---|
| 18-28 | 35678 |
| 29-59 | 91407 |
| 5-17 | 47419 |
| 60+ | 40103 |
Gráficos exploratorios interactivos
g_edad <- ggplot(base,aes(x=p6040))+geom_histogram(bins=30,fill=azul_4,color="white")+labs(title="Distribución de la edad",x="Edad",y="Frecuencia")+tema_informe()
g_sexo <- ggplot(base,aes(x=sexo,fill=sexo,text=paste("Sexo:",sexo)))+geom_bar()+scale_fill_manual(values=c("Hombre"=azul_4,"Mujer"=azul_6))+labs(title="Distribución por sexo",x="Sexo",y="Frecuencia")+tema_informe()+theme(legend.position="none")
g_estudia <- ggplot(base,aes(x=factor(estudia),fill=factor(estudia),text=paste("Condición:",factor(estudia))))+geom_bar()+scale_x_discrete(labels=c("No estudia","Estudia"))+scale_fill_manual(values=c(azul_3,azul_6))+labs(title="Distribución de la variable actualmente estudia",x="Condición",y="Frecuencia")+tema_informe()+theme(legend.position="none")
render_plotly(g_edad)La distribución de la edad evidencia heterogeneidad importante en la población, lo que refuerza la decisión de utilizar grupos etarios como componente central del diseño muestral. Además, el desbalance entre personas que estudian y personas que no estudian justifica la necesidad de estimar la proporción mediante un diseño estadísticamente fundamentado.
Fase I — Diseño muestral
Objetivos de esta fase
- Definir la población, el marco muestral y la unidad de análisis.
- Justificar la selección de un diseño estratificado por sexo y grupo de edad.
- Calcular el tamaño de muestra para estimar la proporción de personas que estudian.
- Implementar asignación proporcional, selección aleatoria y pesos muestrales.
- Formalizar la inferencia con
survey.
Población, marco muestral y unidad de análisis
La población objetivo se definió como el conjunto de personas incluidas en la ENCV 2024 con información disponible para las variables necesarias del análisis. El marco muestral correspondió a la base consolidada obtenida tras la unión de módulos. La unidad de análisis fue cada individuo registrado. Se verificó la ausencia de duplicados exactos por identificadores clave.
N <- nrow(base)
duplicados <- base %>% count(directorio,secuencia_encuesta,secuencia_p,orden) %>% filter(n>1)
tabla_dup <- data.frame(total_poblacion=N,duplicados_detectados=nrow(duplicados))
tabla_bonita(tabla_dup,"Verificación de población y duplicados",0)| total_poblacion | duplicados_detectados |
|---|---|
| 214607 | 0 |
Selección y justificación del diseño muestral
Se eligió un muestreo estratificado con base en la combinación de sexo y grupo de edad. Esta decisión se justifica tanto teórica como prácticamente. Desde el punto de vista teórico, la variable “actualmente estudia” puede diferir ampliamente entre grupos etarios y por sexo, por lo que el uso de estratos permite controlar heterogeneidad y mejorar precisión. Desde el punto de vista práctico, este diseño garantiza representación de subgrupos relevantes y evita que sectores importantes de la población queden insuficientemente representados en la muestra.
Nh_tabla <- base %>% count(estrato_f1,name="Nh")
tabla_bonita(Nh_tabla,"Tamaño poblacional por estrato",0)| estrato_f1 | Nh |
|---|---|
| Hombre - 18-28 | 16873 |
| Hombre - 29-59 | 42797 |
| Hombre - 5-17 | 24457 |
| Hombre - 60+ | 19217 |
| Mujer - 18-28 | 18805 |
| Mujer - 29-59 | 48610 |
| Mujer - 5-17 | 22962 |
| Mujer - 60+ | 20886 |
Cálculo del tamaño de muestra
El tamaño de muestra se determinó para estimar una proporción en población finita bajo un nivel de confianza del 95%, un margen de error del 3% y el valor conservador \(p = 0.5\), que maximiza la varianza.
z <- 1.96; p <- 0.5; q <- 1-p; E <- 0.03
n_calc <- (N*z^2*p*q)/(((N-1)*E^2)+(z^2*p*q))
n_final <- ceiling(n_calc)
tabla_n <- data.frame(N=N,z=z,p=p,q=q,error=E,n_calculado=n_calc,n_final=n_final)
tabla_bonita(tabla_n,"Cálculo del tamaño de muestra",3)| N | z | p | q | error | n_calculado | n_final |
|---|---|---|---|---|---|---|
| 214607 | 1.96 | 0.5 | 0.5 | 0.03 | 1061.836 | 1062 |
Asignación proporcional y selección de la muestra
nh_tabla <- Nh_tabla %>% mutate(nh=round(n_final*Nh/sum(Nh)))
dif_n <- n_final - sum(nh_tabla$nh)
if(dif_n != 0){idx <- which.max(nh_tabla$Nh); nh_tabla$nh[idx] <- nh_tabla$nh[idx]+dif_n}
muestra <- base %>% left_join(nh_tabla,by="estrato_f1") %>% group_by(estrato_f1) %>% group_modify(~ slice_sample(.x,n=.x$nh[1])) %>% ungroup()
verificacion_muestra <- muestra %>% count(estrato_f1,name="n_obtenido") %>% left_join(nh_tabla,by="estrato_f1")
tabla_bonita(nh_tabla,"Asignación proporcional por estrato",0)| estrato_f1 | Nh | nh |
|---|---|---|
| Hombre - 18-28 | 16873 | 83 |
| Hombre - 29-59 | 42797 | 212 |
| Hombre - 5-17 | 24457 | 121 |
| Hombre - 60+ | 19217 | 95 |
| Mujer - 18-28 | 18805 | 93 |
| Mujer - 29-59 | 48610 | 241 |
| Mujer - 5-17 | 22962 | 114 |
| Mujer - 60+ | 20886 | 103 |
| estrato_f1 | n_obtenido | Nh | nh |
|---|---|---|---|
| Hombre - 18-28 | 83 | 16873 | 83 |
| Hombre - 29-59 | 212 | 42797 | 212 |
| Hombre - 5-17 | 121 | 24457 | 121 |
| Hombre - 60+ | 95 | 19217 | 95 |
| Mujer - 18-28 | 93 | 18805 | 93 |
| Mujer - 29-59 | 241 | 48610 | 241 |
| Mujer - 5-17 | 114 | 22962 | 114 |
| Mujer - 60+ | 103 | 20886 | 103 |
Pesos muestrales
muestra <- muestra %>% mutate(peso_muestral=Nh/nh)
resumen_pesos <- data.frame(minimo=min(muestra$peso_muestral,na.rm=TRUE),q1=quantile(muestra$peso_muestral,0.25,na.rm=TRUE),mediana=median(muestra$peso_muestral,na.rm=TRUE),media=mean(muestra$peso_muestral,na.rm=TRUE),q3=quantile(muestra$peso_muestral,0.75,na.rm=TRUE),maximo=max(muestra$peso_muestral,na.rm=TRUE))
tabla_bonita(resumen_pesos,"Resumen de pesos muestrales",3)| minimo | q1 | mediana | media | q3 | maximo | |
|---|---|---|---|---|---|---|
| 25% | 201.421 | 201.701 | 201.873 | 202.078 | 202.284 | 203.289 |
Estimación manual e inferencia con
survey
prop_simple <- mean(muestra$estudia,na.rm=TRUE)
prop_estrat_manual <- weighted.mean(muestra$estudia,w=muestra$peso_muestral,na.rm=TRUE)
n_muestra <- nrow(muestra)
se_prop_simple <- sqrt(prop_simple*(1-prop_simple)/n_muestra)
ic_simple_inf <- prop_simple - 1.96*se_prop_simple
ic_simple_sup <- prop_simple + 1.96*se_prop_simple
resumen_manual <- data.frame(medida=c("N poblacional","n muestral","Proporción simple","Proporción estratificada manual","IC simple inferior","IC simple superior"),valor=c(N,n_muestra,prop_simple,prop_estrat_manual,ic_simple_inf,ic_simple_sup))
diseno_muestral <- svydesign(ids=~1,strata=~estrato_f1,weights=~peso_muestral,data=muestra)
prop_svy <- svymean(~estudia,design=diseno_muestral,na.rm=TRUE)
ic_prop_svy <- confint(prop_svy)
resumen_survey <- data.frame(estimador="Proporción de personas que estudian",proporcion=coef(prop_svy)[1],error_estandar=SE(prop_svy)[1],ic_inf_95=ic_prop_svy[1,1],ic_sup_95=ic_prop_svy[1,2])
comparacion_estimadores <- data.frame(metodo=c("Simple","Estratificado manual","Survey"),estimacion=c(prop_simple,prop_estrat_manual,coef(prop_svy)[1]))
tabla_bonita(resumen_manual,"Estimación manual",4)| medida | valor |
|---|---|
| N poblacional | 214607.0000 |
| n muestral | 1062.0000 |
| Proporción simple | 0.2561 |
| Proporción estratificada manual | 0.2559 |
| IC simple inferior | 0.2299 |
| IC simple superior | 0.2824 |
| estimador | proporcion | error_estandar | ic_inf_95 | ic_sup_95 | |
|---|---|---|---|---|---|
| estudia | Proporción de personas que estudian | 0.2559 | 0.0074 | 0.2414 | 0.2705 |
| metodo | estimacion |
|---|---|
| Simple | 0.2561 |
| Estratificado manual | 0.2559 |
| Survey | 0.2559 |
| indicador | valor |
|---|---|
| Tamaño poblacional | 214,607 |
| Tamaño de muestra | 1,062 |
| Proporción estimada | 25.59% |
| IC 95% | [24.14%, 27.05%] |
Además de la estimación estratificada formal, se calcularon
estimaciones simples como referencia descriptiva. Sin embargo,
la inferencia principal se basa en el objeto de diseño
construido con survey, ya que este incorpora
explícitamente la estratificación y los pesos muestrales. En
consecuencia, el intervalo de confianza reportado con
survey se toma como la referencia metodológica
principal del estudio.
Evaluación de variable auxiliar
aux_edad <- muestra %>% filter(!is.na(p6040),!is.na(estudia))
cor_edad_estudia <- cor(aux_edad$p6040,aux_edad$estudia,use="complete.obs")
tabla_aux <- data.frame(variable_auxiliar="Edad",correlacion_con_estudia=cor_edad_estudia)
tabla_bonita(tabla_aux,"Evaluación exploratoria de variable auxiliar",4)| variable_auxiliar | correlacion_con_estudia |
|---|---|
| Edad | -0.6585 |
Dado que la correlación entre la variable auxiliar edad y la variable de interés es baja, no se justifica el uso de estimadores de razón o regresión, ya que estos no aportarían mejoras sustanciales en la precisión respecto al estimador estratificado.
Fase II — Análisis comparativo con estructura de bloqueo
Objetivos de esta fase
- Construir una base analítica para estudiar el tiempo de desplazamiento a la institución educativa.
- Comparar jornadas académicas mediante ANOVA con una estructura análoga a bloques.
- Evaluar el efecto de la heterogeneidad asociada a sexo y grupo de edad.
- Verificar supuestos del modelo e interpretar comparaciones múltiples.
- Discutir el alcance inferencial del análisis en un contexto observacional.
Planteamiento del análisis comparativo
En esta fase no se trabajó con un experimento controlado, sino con un análisis observacional apoyado en herramientas del diseño experimental. La variable respuesta fue el tiempo de desplazamiento a la institución educativa, medido en minutos. El factor principal de comparación fue la jornada académica, mientras que los bloques se definieron a partir de la combinación de sexo y grupo de edad, las mismas variables utilizadas para estratificar en la Fase I.
Dado que los datos provienen de una encuesta observacional y no de una asignación aleatoria de tratamientos, el análisis no corresponde estrictamente a un diseño en bloques completos aleatorizados en sentido experimental. Sin embargo, se adopta una estructura análoga de bloqueo con el fin de controlar heterogeneidad preexistente en la población y mejorar la interpretación de las diferencias entre jornadas.
Construcción de la base de la Fase II
base_f2 <- base %>% filter(p8586==1,!is.na(p1101),!is.na(p6167),!is.na(sexo),!is.na(grupo_edad)) %>% mutate(minutos=p6167,jornada=dplyr::recode(as.character(p1101),!!!etiquetas_jornada) |> factor(levels=names(pal_jornadas)),bloque=as.factor(estrato_f1)) %>% filter(minutos>0,minutos<=180)
dim_f2 <- data.frame(filas=nrow(base_f2),columnas=ncol(base_f2))
tabla_jornadas <- base_f2 %>% count(jornada,name="frecuencia")
tabla_bonita(dim_f2,"Dimensión de la base analítica de Fase II",0)| filas | columnas |
|---|---|
| 44355 | 24 |
La base analítica de la Fase II quedó conformada por 44,355 observaciones y 24 variables. Para esta fase se conservaron únicamente las personas que actualmente estudian, que tenían información válida sobre jornada académica y tiempo de desplazamiento a la institución. Además, se filtraron tiempos positivos y menores o iguales a 180 minutos para evitar valores extremos poco plausibles.
| jornada | frecuencia |
|---|---|
| Mañana | 35675 |
| Tarde | 4271 |
| Noche | 298 |
| Única/Completa | 3552 |
| Fin de semana | 559 |
La mayoría de los estudiantes se concentra en la jornada de la mañana, con 35,675 observaciones. En contraste, las jornadas de noche y fin de semana tienen frecuencias mucho menores. Esta diferencia en tamaños debe tenerse en cuenta al interpretar el ANOVA, ya que el diseño no está balanceado.
Frecuencias por bloque y jornada
tabla_bloques_f2 <- base_f2 %>% count(bloque,jornada) %>% tidyr::pivot_wider(names_from=jornada,values_from=n,values_fill=0)
tabla_bonita(tabla_bloques_f2,"Frecuencias por bloque y jornada en la Fase II",0)| bloque | Mañana | Tarde | Noche | Única/Completa | Fin de semana |
|---|---|---|---|---|---|
| Hombre - 18-28 | 563 | 50 | 70 | 62 | 110 |
| Hombre - 29-59 | 6 | 2 | 16 | 1 | 24 |
| Hombre - 5-17 | 17772 | 2154 | 74 | 1710 | 112 |
| Hombre - 60+ | 0 | 0 | 1 | 0 | 0 |
| Mujer - 18-28 | 457 | 73 | 67 | 58 | 155 |
| Mujer - 29-59 | 13 | 9 | 28 | 1 | 43 |
| Mujer - 5-17 | 16862 | 1983 | 40 | 1720 | 112 |
| Mujer - 60+ | 2 | 0 | 2 | 0 | 3 |
La tabla por bloque y jornada muestra que la mayor concentración de estudiantes se encuentra en los grupos de 5 a 17 años, tanto en hombres como en mujeres. Algunos bloques, especialmente los de 60 años o más, presentan frecuencias muy bajas, lo cual refleja la baja participación educativa en edades avanzadas. Esta distribución confirma que sexo y grupo de edad capturan heterogeneidad relevante y justifican su uso como bloques.
Descriptivos por jornada
desc_jornada <- base_f2 %>% group_by(jornada) %>% summarise(n=n(),media=mean(minutos,na.rm=TRUE),sd=sd(minutos,na.rm=TRUE),mediana=median(minutos,na.rm=TRUE),min=min(minutos,na.rm=TRUE),max=max(minutos,na.rm=TRUE),.groups="drop")
tabla_bonita(desc_jornada,"Descriptivos del tiempo de desplazamiento por jornada",2)| jornada | n | media | sd | mediana | min | max |
|---|---|---|---|---|---|---|
| Mañana | 35675 | 15.42 | 13.01 | 10 | 5 | 180 |
| Tarde | 4271 | 13.92 | 11.53 | 10 | 5 | 168 |
| Noche | 298 | 16.67 | 12.59 | 15 | 5 | 90 |
| Única/Completa | 3552 | 19.72 | 17.55 | 15 | 5 | 180 |
| Fin de semana | 559 | 24.71 | 23.17 | 20 | 5 | 180 |
Los descriptivos muestran diferencias en el tiempo promedio de desplazamiento entre jornadas. La jornada de fin de semana presenta el mayor promedio, con 24.71 minutos, mientras que la jornada de tarde presenta el menor promedio, con 13.92 minutos. También se observa mayor dispersión en la jornada de fin de semana, lo que indica mayor variabilidad en los tiempos de desplazamiento de ese grupo.
Gráfico interactivo por jornada
g_jornada <- ggplot(base_f2,aes(x=jornada,y=minutos,fill=jornada,text=paste("Jornada:",jornada,"<br>Minutos:",minutos)))+geom_boxplot(alpha=0.85)+scale_fill_manual(values=pal_jornadas)+labs(title="Tiempo de desplazamiento según jornada",x="Jornada",y="Minutos")+tema_informe()
render_plotly(g_jornada,tooltip="text")El gráfico de cajas confirma visualmente las diferencias entre jornadas. La jornada de fin de semana y la jornada única/completa presentan valores centrales más altos y mayor dispersión. También se observan valores extremos en varias jornadas, lo cual es esperable en variables de tiempo de desplazamiento.
Exploración previa: relación entre edad y minutos
cor_edad_minutos <- cor.test(base_f2$p6040,base_f2$minutos,method="pearson",use="complete.obs")
tabla_cor <- data.frame(metodo="Pearson",correlacion=unname(cor_edad_minutos$estimate),p_valor=formatear_p(cor_edad_minutos$p.value),li_95=cor_edad_minutos$conf.int[1],ls_95=cor_edad_minutos$conf.int[2],r_cuadrado=unname(cor_edad_minutos$estimate)^2)
tabla_bonita(tabla_cor,"Correlación exploratoria entre edad y tiempo de desplazamiento",4)| metodo | correlacion | p_valor | li_95 | ls_95 | r_cuadrado |
|---|---|---|---|---|---|
| Pearson | 0.1286 | < 0.0001 | 0.1194 | 0.1377 | 0.0165 |
La correlación entre edad y tiempo de desplazamiento fue positiva pero débil, con un valor de 0.1286. Aunque el valor p es significativo, el \(R^2\) de 0.0165 indica que la edad explica solo una pequeña proporción de la variabilidad en los minutos de desplazamiento. Por tanto, la edad se considera útil como variable de control dentro de los bloques, pero no como explicación principal del tiempo de desplazamiento.
g_cor <- ggplot(base_f2,aes(x=p6040,y=minutos,text=paste("Edad:",p6040,"<br>Minutos:",minutos)))+geom_point(alpha=0.20,color=azul_5)+geom_smooth(method="lm",se=TRUE,color=azul_oscuro)+labs(title="Relación exploratoria entre edad y tiempo de desplazamiento",x="Edad",y="Minutos")+tema_informe()
render_plotly(g_cor,tooltip="text")El gráfico muestra una tendencia positiva leve entre edad y tiempo de desplazamiento, pero con alta dispersión de los puntos. Esto confirma que la relación lineal existe, aunque es débil. Por esta razón, el análisis principal se enfoca en comparar jornadas mediante ANOVA, controlando la heterogeneidad con bloques.
Modelo ANOVA con bloques
\[ Y_{ij} = \mu + \tau_i + \beta_j + \varepsilon_{ij} \]
modelo <- aov(minutos ~ jornada + bloque,data=base_f2)
anova_f2 <- broom::tidy(modelo) %>% mutate(p_valor=formatear_p(p.value)) %>% transmute(fuente=term,suma_cuadrados=sumsq,gl=df,media_cuadratica=meansq,estadistico_F=statistic,p_valor=p_valor)
tabla_bonita(anova_f2,"Tabla ANOVA del modelo con estructura de bloqueo",4)| fuente | suma_cuadrados | gl | media_cuadratica | estadistico_F | p_valor |
|---|---|---|---|---|---|
| jornada | 119331.8 | 4 | 29832.9602 | 164.7337 | < 0.0001 |
| bloque | 11952.8 | 7 | 1707.5424 | 9.4288 | < 0.0001 |
| Residuals | 8030431.2 | 44343 | 181.0981 | NA | NA |
La tabla ANOVA muestra que la jornada tiene un efecto estadísticamente significativo sobre el tiempo de desplazamiento (\(p < 0.0001\)). Esto indica que existen diferencias en el tiempo promedio de desplazamiento entre al menos dos jornadas. Además, el efecto del bloque también fue significativo (\(p < 0.0001\)), lo que confirma que la combinación de sexo y grupo de edad explica parte de la variabilidad observada. Se rechaza la hipótesis nula de igualdad de medias entre jornadas, concluyendo que al menos una jornada presenta un tiempo promedio de desplazamiento diferente.
Tamaño del efecto de la jornada
anova_base <- anova(modelo)
ss_total <- sum(anova_base[["Sum Sq"]],na.rm=TRUE)
ss_jornada <- anova_base[["Sum Sq"]][1]
eta2_jornada <- ss_jornada/ss_total
tabla_eta <- data.frame(efecto="Jornada",eta_cuadrado=eta2_jornada)
tabla_bonita(tabla_eta,"Tamaño del efecto de la jornada",4)| efecto | eta_cuadrado |
|---|---|
| Jornada | 0.0146 |
El tamaño del efecto de la jornada fue \(\eta^2 = 0.0146\). Esto indica que la jornada explica aproximadamente el 1.46% de la variabilidad total del tiempo de desplazamiento. Aunque el efecto es estadísticamente significativo, su magnitud es pequeña, lo cual puede deberse al gran tamaño muestral.
| indicador | valor |
|---|---|
| Observaciones Fase II | 44,355 |
| Resultado ANOVA | p < 0.0001 |
| Mayor media | Fin de semana |
| Eta cuadrado | 0.0146 |
En síntesis, la Fase II incluyó 44,355 observaciones. El ANOVA evidenció diferencias significativas entre jornadas, siendo la jornada de fin de semana la que presentó el mayor tiempo promedio de desplazamiento. Sin embargo, el tamaño del efecto fue bajo, por lo que los resultados deben interpretarse con prudencia.
Verificación de supuestos
Normalidad de residuos
res <- residuals(modelo)
ajustados <- fitted(modelo)
df_res <- data.frame(res=res)
g_hist_res <- ggplot(df_res,aes(x=res))+geom_histogram(bins=30,fill=azul_4,color="white")+labs(title="Histograma de residuos",x="Residuos",y="Frecuencia")+tema_informe()
render_plotly(g_hist_res)El histograma de residuos permite evaluar visualmente la normalidad. Se observa una distribución concentrada alrededor de cero, aunque con cierta asimetría y presencia de valores extremos, lo cual es común en variables de tiempo.
qq_teorico <- qnorm(ppoints(length(res)))
qq_observado <- sort(res)
df_qq <- data.frame(teorico=qq_teorico,observado=qq_observado)
q1_obs <- quantile(res,0.25,na.rm=TRUE); q3_obs <- quantile(res,0.75,na.rm=TRUE); q1_teo <- qnorm(0.25); q3_teo <- qnorm(0.75)
slope_qq <- (q3_obs-q1_obs)/(q3_teo-q1_teo)
intercept_qq <- q1_obs - slope_qq*q1_teo
plot_ly(data=df_qq,x=~teorico,y=~observado,type="scatter",mode="markers",marker=list(color=azul_5,size=5,opacity=0.6),text=~paste("Cuantil teórico:",round(teorico,3),"<br>Cuantil observado:",round(observado,3)),hoverinfo="text") %>% add_lines(x=~teorico,y=~(intercept_qq+slope_qq*teorico),line=list(width=2,color=azul_oscuro)) %>% layout(autosize=TRUE,margin=list(l=70,r=30,t=70,b=70),title="Q-Q plot de los residuos",xaxis=list(title="Cuantiles teóricos"),yaxis=list(title="Cuantiles observados")) %>% plotly::config(displaylogo=FALSE,responsive=TRUE)El gráfico Q-Q muestra desviaciones respecto a la línea teórica, especialmente en las colas. Esto sugiere que la normalidad de los residuos no se cumple de manera estricta. Sin embargo, debido al tamaño muestral elevado, el ANOVA puede considerarse razonablemente robusto.
Homocedasticidad
levene_res <- leveneTest(minutos ~ jornada,data=base_f2)
levene_tabla <- data.frame(gl_1=levene_res$Df[1],gl_2=levene_res$Df[2],F=levene_res$`F value`[1],p_valor=formatear_p(levene_res$`Pr(>F)`[1]))
tabla_bonita(levene_tabla,"Prueba de Levene para homogeneidad de varianzas",4)| gl_1 | gl_2 | F | p_valor |
|---|---|---|---|
| 4 | 44350 | 102.8191 | < 0.0001 |
La prueba de Levene resultó significativa, lo que indica evidencia de diferencias en las varianzas entre jornadas. Esto sugiere que el supuesto de homogeneidad de varianzas no se cumple completamente. Por esta razón, los resultados del ANOVA deben interpretarse con cautela y complementarse con la inspección gráfica y el análisis de comparaciones múltiples. Dado el incumplimiento del supuesto de homogeneidad de varianzas, los resultados deben interpretarse con precaución, especialmente en la comparación de grupos con tamaños desbalanceados.
Residuos vs ajustados e independencia en secuencia
df_diag <- data.frame(ajustados=ajustados,residuos=res,orden=seq_along(res))
paso_secuencia <- max(1,floor(nrow(df_diag)/5000))
df_diag_seq <- df_diag[seq(1,nrow(df_diag),by=paso_secuencia),]
g_res_aj <- ggplot(df_diag,aes(x=ajustados,y=residuos,text=paste("Ajustado:",round(ajustados,2),"<br>Residuo:",round(residuos,2))))+geom_point(color=azul_5,alpha=0.45)+geom_hline(yintercept=0,color=azul_oscuro,linetype=2,linewidth=1)+labs(title="Residuos vs ajustados",x="Valores ajustados",y="Residuos")+tema_informe()
render_plotly(g_res_aj,tooltip="text")El gráfico de residuos contra valores ajustados permite evaluar si existe algún patrón sistemático. Aunque se observa variabilidad en la dispersión de los residuos, no se identifica una estructura lineal clara. Esto respalda el uso del modelo como aproximación comparativa, aunque reconociendo limitaciones por heterocedasticidad.
g_res_seq <- ggplot(df_diag_seq,aes(x=orden,y=residuos,text=paste("Orden:",orden,"<br>Residuo:",round(residuos,2))))+geom_line(color=azul_5,linewidth=0.45,alpha=0.85)+geom_point(color=azul_4,alpha=0.35,size=0.7)+geom_hline(yintercept=0,color=azul_oscuro,linetype=2,linewidth=1)+labs(title="Residuos en secuencia",subtitle="Visualización con muestreo de puntos para evitar saturación gráfica",x="Orden de observación",y="Residuo")+tema_informe()
render_plotly(g_res_seq,tooltip="text")El gráfico de residuos en secuencia se utilizó como una revisión visual de independencia. No se observa un patrón temporal o secuencial claramente definido, por lo que no hay evidencia visual fuerte de dependencia entre observaciones. Sin embargo, al tratarse de datos de encuesta, la independencia debe interpretarse con precaución.
Comparaciones múltiples
tukey_res <- TukeyHSD(modelo,"jornada")
tukey_tabla <- as.data.frame(tukey_res$jornada) %>% tibble::rownames_to_column("comparacion") %>% mutate(p_ajustado=formatear_p(`p adj`)) %>% select(comparacion,diff,lwr,upr,p_ajustado)
tabla_bonita(tukey_tabla,"Comparaciones múltiples de Tukey",4)| comparacion | diff | lwr | upr | p_ajustado |
|---|---|---|---|---|
| Tarde-Mañana | -1.5061 | -2.1004 | -0.9117 | < 0.0001 |
| Noche-Mañana | 1.2501 | -0.8853 | 3.3854 | 0.4993 |
| Única/Completa-Mañana | 4.2968 | 3.6510 | 4.9427 | < 0.0001 |
| Fin de semana-Mañana | 9.2927 | 7.7280 | 10.8574 | < 0.0001 |
| Noche-Tarde | 2.7561 | 0.5567 | 4.9555 | 0.0057 |
| Única/Completa-Tarde | 5.8029 | 4.9693 | 6.6365 | < 0.0001 |
| Fin de semana-Tarde | 10.7988 | 9.1477 | 12.4498 | < 0.0001 |
| Única/Completa-Noche | 3.0468 | 0.8329 | 5.2606 | 0.0016 |
| Fin de semana-Noche | 8.0426 | 5.4097 | 10.6756 | < 0.0001 |
| Fin de semana-Única/Completa | 4.9959 | 3.3256 | 6.6662 | < 0.0001 |
Las comparaciones múltiples de Tukey muestran que la mayoría de pares de jornadas presentan diferencias estadísticamente significativas. La única comparación no significativa fue Noche-Mañana, con \(p = 0.4993\), lo que indica que no hay evidencia suficiente para afirmar que estas dos jornadas difieran en su tiempo promedio de desplazamiento.
df_tukey_plot <- as.data.frame(tukey_res$jornada) %>% tibble::rownames_to_column("comparacion")
g_tukey <- ggplot(df_tukey_plot,aes(x=diff,y=reorder(comparacion,diff),text=paste("Comparación:",comparacion,"<br>Diferencia:",round(diff,3),"<br>LI:",round(lwr,3),"<br>LS:",round(upr,3),"<br>p ajustado:",formatear_p(`p adj`))))+geom_vline(xintercept=0,color=azul_oscuro,linetype=2,linewidth=1)+geom_errorbarh(aes(xmin=lwr,xmax=upr),height=0.18,color=azul_5)+geom_point(color=azul_oscuro,size=2.5)+labs(title="Comparaciones múltiples de Tukey",x="Diferencia de medias",y="Comparación")+tema_informe()
render_plotly(g_tukey,tooltip="text")El gráfico de Tukey muestra los intervalos de confianza para las diferencias de medias entre jornadas. Las comparaciones cuyos intervalos no cruzan el cero indican diferencias significativas. Se observa que la jornada de fin de semana presenta diferencias positivas importantes frente a las demás jornadas, confirmando que es el grupo con mayor tiempo promedio de desplazamiento.
Potencia del diseño
medias_jornada <- tapply(base_f2$minutos,base_f2$jornada,mean,na.rm=TRUE)
var_entre <- var(as.numeric(medias_jornada),na.rm=TRUE)
mse <- summary(modelo)[[1]]["Residuals","Mean Sq"]
n_por_grupo_aprox <- floor(min(table(base_f2$jornada)))
k_grupos <- length(unique(base_f2$jornada))
potencia_aprox <- power.anova.test(groups=k_grupos,n=n_por_grupo_aprox,between.var=var_entre,within.var=mse,sig.level=0.05)
tabla_potencia <- data.frame(grupos=potencia_aprox$groups,n_por_grupo=potencia_aprox$n,varianza_entre=potencia_aprox$between.var,varianza_dentro=potencia_aprox$within.var,nivel_significancia=potencia_aprox$sig.level,potencia=potencia_aprox$power)
tabla_bonita(tabla_potencia,"Potencia aproximada del diseño",4)| grupos | n_por_grupo | varianza_entre | varianza_dentro | nivel_significancia | potencia |
|---|---|---|---|---|---|
| 5 | 298 | 18.2728 | 181.0981 | 0.05 | 1 |
La potencia se estimó de manera aproximada mediante
power.anova.test, tomando como referencia el
número mínimo de observaciones por jornada y una
descomposición simplificada de la varianza entre y dentro de
grupos. Dado que el diseño no es balanceado, incorpora bloques
y además proviene de datos observacionales, esta medida debe
interpretarse como una aproximación orientativa y no como una
cuantificación exacta de la potencia del modelo.
La alta potencia obtenida es consistente con el gran tamaño muestral, lo que incrementa la probabilidad de detectar diferencias incluso cuando el tamaño del efecto es pequeño.
Integración y discusión
El estudio se construyó bajo una lógica integrada. En la Fase I, sexo y grupo de edad fueron usados para definir estratos y mejorar la representatividad del muestreo. En la Fase II, esas mismas variables se reutilizaron como bloques para controlar heterogeneidad en el análisis comparativo. Esta conexión permite afirmar que el proyecto no se desarrolló como dos ejercicios aislados, sino como un estudio estadístico coherente de principio a fin.
Los resultados muestran que, aunque la edad presenta una relación estadísticamente significativa con el tiempo de desplazamiento, dicha relación es débil y no explica de forma sustancial la variabilidad observada. En cambio, la jornada académica sí constituye un factor relevante para comprender diferencias en los tiempos de desplazamiento. Esto resalta la importancia de elegir el método de análisis apropiado según la naturaleza del fenómeno: en este caso, la comparación de grupos mediante ANOVA fue más informativa que un enfoque centrado en correlación lineal.
Aunque se observaron desviaciones respecto a normalidad y homogeneidad de varianzas, el tamaño muestral elevado y la naturaleza comparativa del análisis permiten considerar al ANOVA como una aproximación razonablemente robusta. No obstante, los resultados deben interpretarse como evidencia de diferencias asociativas y no como efectos causales.
También es importante señalar que los datos son observacionales. Por ello, los resultados no deben interpretarse en términos causales estrictos, sino como evidencia de asociación y diferencias entre grupos.
Conclusiones y limitaciones
Conclusiones
- Se construyó una base analítica reproducible a partir de la ENCV 2024 del DANE, integrando módulos relevantes para estudiar simultáneamente participación educativa y tiempo de desplazamiento.
- La Fase I permitió implementar un diseño de muestreo estratificado por sexo y grupo de edad, con cálculo formal de tamaño de muestra, asignación proporcional y construcción de pesos muestrales.
- La proporción estimada de personas que actualmente estudian fue cercana al 25.59%, con intervalo de confianza al 95% de [24.14%, 27.05%].
- La comparación entre estimación simple, estratificada
manual y formalización con
surveymostró resultados cercanos entre sí, aunque la inferencia principal se fundamentó ensurvey, por ser el enfoque que incorpora explícitamente la estructura del diseño. - En la Fase II, la jornada académica mostró diferencias estadísticamente significativas en el tiempo promedio de desplazamiento, incluso tras controlar heterogeneidad asociada a sexo y grupo de edad mediante una estructura análoga de bloqueo.
- Las comparaciones múltiples evidenciaron que algunas jornadas, en particular la jornada de mayor media, presentan tiempos medios de desplazamiento superiores a los de otros grupos.
- Aunque los supuestos clásicos del ANOVA no se cumplieron de manera estricta, el tamaño muestral elevado permite considerar los resultados como razonablemente robustos, siempre bajo una interpretación prudente.
- El principal aporte del trabajo fue la articulación coherente entre muestreo e inferencia comparativa, reutilizando en la segunda fase la misma estructura de heterogeneidad identificada en la primera.
- En conjunto, el estudio evidencia que la integración entre técnicas de muestreo e inferencia comparativa no solo es posible, sino metodológicamente deseable para obtener resultados más robustos y coherentes en contextos reales.
Limitaciones
Este estudio presenta varias limitaciones. En primer lugar, la Fase II se basa en datos observacionales, por lo que no permite establecer relaciones causales en sentido estricto. En segundo lugar, algunas variables potencialmente útiles mostraron una cantidad importante de valores faltantes en la base analítica, lo que limitó su incorporación. Finalmente, aunque el ANOVA fue robusto por tamaño muestral, la evidencia de heterocedasticidad y desviación respecto a la normalidad debe reconocerse de manera explícita al interpretar los resultados.
Declaración de uso de IA y referencias
Declaración de uso de IA
En el desarrollo de este trabajo se utilizaron herramientas de inteligencia artificial como apoyo para organizar la estructura del informe, mejorar la redacción académica. La IA fue útil para proponer alternativas de análisis, pero varias de esas sugerencias debieron evaluarse críticamente y, en algunos casos, descartarse por no ajustarse a la estructura de los datos o a los objetivos del proyecto. Por ello, la IA fue utilizada como herramienta de apoyo y no como sustituto del razonamiento estadístico.
Referencias
DANE. (2024). Encuesta Nacional de Calidad de Vida (ENCV) 2024. Departamento Administrativo Nacional de Estadística.
Lohr, S. L. (2022). Sampling: Design and Analysis (3rd ed.). CRC Press.
Montgomery, D. C. (2017). Design and Analysis of Experiments (9th ed.). Wiley.
Lumley, T. (2020). survey: Analysis of Complex Survey Samples. Paquete de R.
Reproducibilidad
Este documento fue elaborado en R Markdown con el objetivo de garantizar la reproducibilidad completa del análisis. Todas las etapas, desde la carga de datos hasta la generación de resultados, se encuentran integradas en un flujo de trabajo que permite replicar los resultados ejecutando el documento desde el inicio.
En primer lugar, se fijó una semilla global mediante
set.seed() al inicio del análisis, con el fin de
asegurar la reproducibilidad de los procedimientos que
involucran selección aleatoria, como el muestreo estratificado
realizado en la Fase I.
La base de datos utilizada proviene de los microdatos públicos de la Encuesta Nacional de Calidad de Vida (ECV) 2024 del DANE. Los archivos fueron descargados y procesados previamente, y posteriormente integrados en este documento mediante la unión de múltiples tablas (educación, características del hogar, TIC y diseño muestral), utilizando identificadores comunes. Todo el proceso de limpieza, transformación y construcción de variables se encuentra documentado en el código del informe.
Todos los paquetes utilizados se declaran explícitamente en
el chunk de configuración (setup), lo que permite
reconstruir el entorno de trabajo necesario para ejecutar el
análisis sin ambigüedades.
Adicionalmente, todas las tablas, gráficos y resultados numéricos presentados en el documento son generados directamente a partir del código incluido, sin intervención manual, garantizando coherencia entre el análisis y la presentación de resultados.
Huella de sesión
A continuación se presenta una descripción del entorno de ejecución utilizado:
- Versión de R: R version 4.5.2 (2025-10-31 ucrt)
- Plataforma: x86_64-w64-mingw32/x64
- Sistema operativo: Windows
Y más detallado:
## R version 4.5.2 (2025-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8 LC_CTYPE=Spanish_Colombia.utf8
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Colombia.utf8
##
## time zone: America/Bogota
## tzcode source: internal
##
## attached base packages:
## [1] grid stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] scales_1.4.0 htmltools_0.5.8.1 kableExtra_1.4.0 knitr_1.51
## [5] survey_4.4-8 survival_3.8-3 Matrix_1.7-4 tibble_3.2.1
## [9] car_3.1-5 carData_3.0-6 broom_1.0.12 stringr_1.6.0
## [13] plotly_4.12.0 ggplot2_4.0.2 janitor_2.2.1 tidyr_1.3.1
## [17] dplyr_1.1.4 readr_2.1.5
##
## loaded via a namespace (and not attached):
## [1] gtable_0.3.6 xfun_0.52 bslib_0.10.0
## [4] htmlwidgets_1.6.4 lattice_0.22-7 tzdb_0.5.0
## [7] crosstalk_1.2.2 vctrs_0.6.5 tools_4.5.2
## [10] generics_0.1.4 parallel_4.5.2 pkgconfig_2.0.3
## [13] data.table_1.18.2.1 RColorBrewer_1.1-3 S7_0.2.1
## [16] lifecycle_1.0.5 compiler_4.5.2 farver_2.1.2
## [19] textshaping_1.0.4 mitools_2.4 snakecase_0.11.1
## [22] sass_0.4.10 yaml_2.3.10 lazyeval_0.2.2
## [25] Formula_1.2-5 crayon_1.5.3 pillar_1.11.1
## [28] jquerylib_0.1.4 cachem_1.1.0 abind_1.4-8
## [31] nlme_3.1-168 tidyselect_1.2.1 digest_0.6.37
## [34] stringi_1.8.7 purrr_1.1.0 labeling_0.4.3
## [37] splines_4.5.2 fastmap_1.2.0 cli_3.6.5
## [40] magrittr_2.0.3 withr_3.0.2 backports_1.5.0
## [43] bit64_4.6.0-1 lubridate_1.9.4 timechange_0.3.0
## [46] rmarkdown_2.30 httr_1.4.7 bit_4.6.0
## [49] otel_0.2.0 hms_1.1.4 evaluate_1.0.5
## [52] viridisLite_0.4.3 mgcv_1.9-3 rlang_1.1.7
## [55] Rcpp_1.1.0 glue_1.8.0 DBI_1.2.3
## [58] xml2_1.5.2 vroom_1.7.0 svglite_2.2.2
## [61] rstudioapi_0.18.0 jsonlite_2.0.0 R6_2.6.1
## [64] systemfonts_1.3.1