1. Lectura del
marco
rm(list = ls())
if(!require(survey)) install.packages("survey")
if(!require(sampling)) install.packages("sampling")
library(survey)
library(sampling)
base <- readRDS("C:/Users/equipo/Desktop/aa/Copia de Marco.rds")
resumen_base <- data.frame(
Base = "Marco original",
Filas = nrow(base),
Columnas = ncol(base)
)
knitr::kable(resumen_base, caption = "Resumen general del marco poblacional")
Resumen general del marco poblacional
| Marco original |
546212 |
82 |
2. Base de estudio:
Cali
# Código DANE de Cali: 76001
base_cali <- subset(base, COLE_COD_MCPIO_UBICACION == 76001)
# Variable original del ejemplo: colegio académico
base_cali$academico <- ifelse(base_cali$COLE_CARACTER == "ACADÉMICO", 1, 0)
# Variable adicional no asociada a puntajes: colegio oficial
base_cali$oficial <- ifelse(
trimws(toupper(as.character(base_cali$COLE_NATURALEZA))) == "OFICIAL",
1,
0
)
# Variables categóricas usadas en las estimaciones
base_cali$DESEMP_INGLES <- as.factor(base_cali$DESEMP_INGLES)
base_cali$ESTU_GENERACION.E <- as.factor(base_cali$ESTU_GENERACION.E)
resumen_cali <- data.frame(
Base = "Cali",
Filas = nrow(base_cali),
Columnas = ncol(base_cali),
Proporcion_en_marco = round(nrow(base_cali) / nrow(base), 4)
)
knitr::kable(resumen_cali, caption = "Resumen de la base filtrada para Cali")
Resumen de la base filtrada para Cali
| Cali |
16666 |
84 |
0.0305 |
2.1 Distribuciones
principales
tabla_naturaleza <- as.data.frame(table(base_cali$COLE_NATURALEZA, useNA = "ifany"))
names(tabla_naturaleza) <- c("Naturaleza del colegio", "Frecuencia")
knitr::kable(tabla_naturaleza, caption = "Distribución de la naturaleza del colegio")
Distribución de la naturaleza del colegio
| NO OFICIAL |
5065 |
| OFICIAL |
11601 |
tabla_oficial <- as.data.frame(table(base_cali$oficial, useNA = "ifany"))
names(tabla_oficial) <- c("Oficial", "Frecuencia")
tabla_oficial$Oficial <- ifelse(
as.character(tabla_oficial$Oficial) == "1",
"Oficial",
"No oficial"
)
knitr::kable(tabla_oficial, caption = "Distribución de la variable indicadora oficial")
Distribución de la variable indicadora oficial
| No oficial |
5065 |
| Oficial |
11601 |
tabla_ingles <- as.data.frame(table(base_cali$DESEMP_INGLES, useNA = "ifany"))
names(tabla_ingles) <- c("Desempeño en inglés", "Frecuencia")
knitr::kable(tabla_ingles, caption = "Distribución del desempeño en inglés")
Distribución del desempeño en inglés
| A- |
7629 |
| A1 |
5194 |
| A2 |
2781 |
| B+ |
107 |
| B1 |
955 |
tabla_generacion <- as.data.frame(table(base_cali$ESTU_GENERACION.E, useNA = "ifany"))
names(tabla_generacion) <- c("Generación E", "Frecuencia")
knitr::kable(tabla_generacion, caption = "Distribución de la variable ESTU_GENERACION.E")
Distribución de la variable ESTU_GENERACION.E
| GENERACION E - EXCELENCIA DEPARTAMENTAL |
1 |
| GENERACION E - EXCELENCIA NACIONAL |
93 |
| GENERACION E - GRATUIDAD |
5426 |
| NO |
11146 |
3. Tamaño de
muestra
n.mas <- function(tipo, N, s = NULL, e, p = NULL, alpha){
if(tipo == "t"){
n <- round(
(qnorm(1 - alpha/2)^2 * N^2 * s^2) /
(e^2 + qnorm(1 - alpha/2)^2 * N * s^2),
0
)
return(n)
}
if(tipo == "m"){
n <- round(
(qnorm(1 - alpha/2)^2 * s^2) /
(e^2 + (qnorm(1 - alpha/2)^2 * s^2 / N)),
0
)
return(n)
}
if(tipo == "p"){
n <- round(
(qnorm(1 - alpha/2)^2 * (N/(N - 1)) * p * (1 - p)) /
(e^2 + (qnorm(1 - alpha/2)^2 * (N/(N - 1)) * p * (1 - p) * (1/N))),
0
)
return(n)
}
}
N <- nrow(base_cali)
alpha <- 0.05
escenarios_n <- data.frame(
Tipo = c("Proporción", "Proporción", "Proporción"),
N = N,
p = c(0.5, 0.5, 0.3),
e = c(0.05, 0.04, 0.04),
alpha = alpha
)
escenarios_n$n_estimado <- mapply(
FUN = function(N, p, e, alpha){
n.mas(tipo = "p", N = N, e = e, p = p, alpha = alpha)
},
N = escenarios_n$N,
p = escenarios_n$p,
e = escenarios_n$e,
alpha = escenarios_n$alpha
)
knitr::kable(escenarios_n, caption = "Escenarios para el cálculo del tamaño de muestra")
Escenarios para el cálculo del tamaño de muestra
| Proporción |
16666 |
0.5 |
0.05 |
0.05 |
376 |
| Proporción |
16666 |
0.5 |
0.04 |
0.05 |
579 |
| Proporción |
16666 |
0.3 |
0.04 |
0.05 |
489 |
# Se toma el segundo escenario, equivalente al usado en la estructura original.
n_calculado <- escenarios_n$n_estimado[2]
n_seleccionado <- data.frame(
Escenario = "p = 0.5, e = 0.04, alpha = 0.05",
n = n_calculado
)
knitr::kable(n_seleccionado, caption = "Tamaño de muestra seleccionado")
Tamaño de muestra seleccionado
| p = 0.5, e = 0.04, alpha = 0.05 |
579 |
4. Selección de la
muestra
4.1 Coordinado
negativo
s.mas <- function(base, n, seed){
N <- nrow(base)
set.seed(seed)
base$u <- runif(nrow(base))
base <- base[with(base, order(u)), ]
base <- base[1:n, ]
base$pik <- n/N
return(base)
}
n <- n_calculado
seed <- 123
muestra <- s.mas(base_cali, n, seed)
resumen_muestra <- data.frame(
Metodo = "Coordinado negativo",
N_poblacion = nrow(base_cali),
n_muestra = nrow(muestra),
Probabilidad_inclusion = unique(round(muestra$pik, 6)),
Factor_expansion = unique(round(1/muestra$pik, 4))
)
knitr::kable(resumen_muestra, caption = "Resumen de la muestra seleccionada por coordinado negativo")
Resumen de la muestra seleccionada por coordinado
negativo
| Coordinado negativo |
16666 |
579 |
0.034741 |
28.7841 |
4.2 Selección y
rechazo
Fan_Muller <- function(base, n, seed){
N <- nrow(base)
j <- 0
m <- numeric(N)
set.seed(seed)
for(k in 1:N){
if(runif(1) < (n - j)/(N - k + 1)){
j <- j + 1
m[k] <- 1
}
}
return(m)
}
m <- Fan_Muller(base_cali, n, seed)
muestra2 <- base_cali[which(m == 1), ]
resumen_muestra2 <- data.frame(
Metodo = "Selección y rechazo",
N_poblacion = nrow(base_cali),
n_muestra = nrow(muestra2)
)
knitr::kable(resumen_muestra2, caption = "Resumen de la muestra seleccionada por selección y rechazo")
Resumen de la muestra seleccionada por selección y
rechazo
| Selección y rechazo |
16666 |
579 |
5. El pi-estimador bajo
el MAS en una etapa
salida <- function(est, alpha){
est <- as.data.frame(est)
names(est)[2] <- "se"
est$cv <- 100 * (est$se / est[, 1])
est$ic_low <- est[, 1] - qnorm(1 - alpha/2) * est$se
est$ic_upp <- est[, 1] + qnorm(1 - alpha/2) * est$se
cols_numericas <- sapply(est, is.numeric)
est[cols_numericas] <- lapply(est[cols_numericas], round, 2)
return(est)
}
N <- nrow(base_cali)
muestra$ind <- rep(1, nrow(muestra))
muestra$Fexp <- 1 / muestra$pik
muestra$fpc <- N
dsgn <- svydesign(
id = ~1,
fpc = ~fpc,
data = muestra,
weights = ~Fexp
)
resumen_diseno <- data.frame(
Diseno = "MAS sin reemplazo",
N_poblacion = N,
n_muestra = nrow(muestra),
Factor_expansion = round(unique(muestra$Fexp), 4)
)
knitr::kable(resumen_diseno, caption = "Resumen del diseño muestral")
Resumen del diseño muestral
| MAS sin reemplazo |
16666 |
579 |
28.7841 |
5.1 Estimación del
total
est <- svytotal(~academico, dsgn, deff = TRUE, na.rm = TRUE)
alpha <- 0.05
tabla <- salida(est, alpha)
knitr::kable(tabla, caption = "Estimación del total de registros asociados a colegios académicos")
Estimación del total de registros asociados a colegios
académicos
| academico |
2273.94 |
233.78 |
1 |
10.28 |
1815.74 |
2732.15 |
5.3 Estimación de
proporción
est2 <- svymean(~DESEMP_INGLES, dsgn, deff = TRUE, na.rm = TRUE)
tabla2 <- salida(est2, alpha)
knitr::kable(tabla2, caption = "Estimación de proporciones para desempeño en inglés")
Estimación de proporciones para desempeño en inglés
| DESEMP_INGLESA- |
0.44 |
0.02 |
1 |
4.61 |
0.40 |
0.48 |
| DESEMP_INGLESA1 |
0.34 |
0.02 |
1 |
5.73 |
0.30 |
0.37 |
| DESEMP_INGLESA2 |
0.15 |
0.01 |
1 |
9.92 |
0.12 |
0.17 |
| DESEMP_INGLESB+ |
0.01 |
0.00 |
1 |
36.94 |
0.00 |
0.02 |
| DESEMP_INGLESB1 |
0.07 |
0.01 |
1 |
15.42 |
0.05 |
0.09 |
5.4 Estimación de más
de una variable
est3 <- svymean(
~PUNT_GLOBAL +
PUNT_LECTURA_CRITICA +
PUNT_MATEMATICAS +
PUNT_C_NATURALES +
PUNT_SOCIALES_CIUDADANAS +
PUNT_INGLES,
dsgn,
na.rm = TRUE
)
tabla3 <- salida(est3, alpha)
knitr::kable(tabla3, caption = "Estimación de medias para diferentes puntajes")
Estimación de medias para diferentes puntajes
| PUNT_GLOBAL |
245.28 |
1.96 |
0.80 |
241.44 |
249.13 |
| PUNT_LECTURA_CRITICA |
52.51 |
0.42 |
0.81 |
51.68 |
53.34 |
| PUNT_MATEMATICAS |
49.57 |
0.46 |
0.93 |
48.67 |
50.47 |
| PUNT_C_NATURALES |
48.09 |
0.41 |
0.86 |
47.28 |
48.90 |
| PUNT_SOCIALES_CIUDADANAS |
46.04 |
0.48 |
1.04 |
45.10 |
46.98 |
| PUNT_INGLES |
49.10 |
0.50 |
1.01 |
48.13 |
50.08 |
6. Estimaciones por
dominio usando MAS
6.1 Estimación del
tamaño de un dominio
est4 <- svyby(
~ind,
~ESTU_GENERACION.E,
dsgn,
svytotal,
na.rm = TRUE
)
est4_tab <- as.data.frame(est4)
est4_aux <- est4_tab[, -1]
tabla4 <- salida(est4_aux, alpha)
tabla4 <- cbind(Dominio = est4_tab$ESTU_GENERACION.E, tabla4)
knitr::kable(tabla4, caption = "Estimación del tamaño del dominio según ESTU_GENERACION.E")
Estimación del tamaño del dominio según
ESTU_GENERACION.E
| GENERACION E - EXCELENCIA NACIONAL |
GENERACION E - EXCELENCIA NACIONAL |
28.78 |
28.28 |
98.25 |
-26.64 |
84.21 |
| GENERACION E - GRATUIDAD |
GENERACION E - GRATUIDAD |
5728.04 |
323.47 |
5.65 |
5094.06 |
6362.02 |
| NO |
NO |
10909.18 |
323.85 |
2.97 |
10274.44 |
11543.91 |
6.2 Estimación del
total de una variable asociada a un dominio
est5 <- svyby(
~academico,
~ESTU_GENERACION.E,
dsgn,
svytotal,
deff = TRUE,
na.rm = TRUE
)
est5_tab <- as.data.frame(est5)
est5_aux <- est5_tab[, -1]
tabla5 <- salida(est5_aux, alpha)
tabla5 <- cbind(Dominio = est5_tab$ESTU_GENERACION.E, tabla5)
knitr::kable(tabla5, caption = "Estimación del total de colegios académicos por dominio")
Estimación del total de colegios académicos por
dominio
| GENERACION E - EXCELENCIA NACIONAL |
GENERACION E - EXCELENCIA NACIONAL |
0.00 |
0.00 |
NA |
NaN |
0.00 |
0.00 |
| GENERACION E - GRATUIDAD |
GENERACION E - GRATUIDAD |
1151.36 |
172.72 |
1.16 |
15.00 |
812.85 |
1489.88 |
| NO |
NO |
1122.58 |
170.70 |
1.04 |
15.21 |
788.01 |
1457.15 |
6.4 Estimación de
proporción de una variable asociada a un dominio
salida_prop_dom <- function(est, var_cat, dom_var, alpha){
est <- as.data.frame(est)
p_cols <- names(est)[startsWith(names(est), var_cat)]
p_cols <- p_cols[!startsWith(p_cols, "se.")]
se_cols <- paste0("se.", p_cols)
tab2 <- NULL
for(j in seq_along(p_cols)){
categoria <- gsub(var_cat, "", p_cols[j])
tab <- data.frame(
dominio = est[[dom_var]],
categoria = categoria,
p = est[[p_cols[j]]],
se = est[[se_cols[j]]]
)
tab$cv <- ifelse(tab$p == 0, NA, 100 * tab$se / tab$p)
tab$ic_low <- tab$p - qnorm(1 - alpha/2) * tab$se
tab$ic_upp <- tab$p + qnorm(1 - alpha/2) * tab$se
tab2 <- rbind(tab2, tab)
}
cols_numericas <- sapply(tab2, is.numeric)
tab2[cols_numericas] <- lapply(tab2[cols_numericas], round, 4)
return(tab2)
}
est7 <- svyby(
~DESEMP_INGLES,
~ESTU_GENERACION.E,
dsgn,
svymean,
deff = TRUE,
na.rm = TRUE
)
tabla7 <- salida_prop_dom(
est = est7,
var_cat = "DESEMP_INGLES",
dom_var = "ESTU_GENERACION.E",
alpha = 0.05
)
knitr::kable(tabla7, caption = "Estimación de proporciones del desempeño en inglés por dominio")
Estimación de proporciones del desempeño en inglés por
dominio
| GENERACION E - EXCELENCIA NACIONAL |
A- |
0.0000 |
0.0000 |
NA |
0.0000 |
0.0000 |
| GENERACION E - GRATUIDAD |
A- |
0.5628 |
0.0346 |
6.1436 |
0.4950 |
0.6306 |
| NO |
A- |
0.3773 |
0.0245 |
6.4888 |
0.3293 |
0.4253 |
| GENERACION E - EXCELENCIA NACIONAL |
A1 |
0.0000 |
0.0000 |
NA |
0.0000 |
0.0000 |
| GENERACION E - GRATUIDAD |
A1 |
0.3317 |
0.0328 |
9.8952 |
0.2673 |
0.3960 |
| NO |
A1 |
0.3404 |
0.0239 |
7.0316 |
0.2935 |
0.3873 |
| GENERACION E - EXCELENCIA NACIONAL |
A2 |
0.0000 |
0.0000 |
NA |
0.0000 |
0.0000 |
| GENERACION E - GRATUIDAD |
A2 |
0.0754 |
0.0184 |
24.4137 |
0.0393 |
0.1114 |
| NO |
A2 |
0.1821 |
0.0195 |
10.7062 |
0.1439 |
0.2203 |
| GENERACION E - EXCELENCIA NACIONAL |
B+ |
0.0000 |
0.0000 |
NA |
0.0000 |
0.0000 |
| GENERACION E - GRATUIDAD |
B+ |
0.0101 |
0.0070 |
69.1813 |
-0.0036 |
0.0237 |
| NO |
B+ |
0.0132 |
0.0058 |
43.6846 |
0.0019 |
0.0245 |
| GENERACION E - EXCELENCIA NACIONAL |
B1 |
1.0000 |
0.0000 |
0.0000 |
1.0000 |
1.0000 |
| GENERACION E - GRATUIDAD |
B1 |
0.0201 |
0.0098 |
48.6696 |
0.0009 |
0.0393 |
| NO |
B1 |
0.0871 |
0.0142 |
16.3553 |
0.0592 |
0.1150 |
7. Estimación adicional
con una variable no asociada a puntajes
En esta sección se utiliza la variable COLE_NATURALEZA,
a partir de la cual se construyó la variable indicadora
oficial. Esta variable toma el valor de 1 cuando el colegio
es oficial y 0 en caso contrario.
7.1 Estimación del
total de registros asociados a colegios oficiales
est_oficial_total <- svytotal(
~oficial,
dsgn,
deff = TRUE,
na.rm = TRUE
)
tabla_oficial_total <- salida(est_oficial_total, alpha)
knitr::kable(tabla_oficial_total, caption = "Estimación del total de registros asociados a colegios oficiales")
Estimación del total de registros asociados a colegios
oficiales
| oficial |
11628.78 |
312.77 |
1 |
2.69 |
11015.77 |
12241.79 |
7.2 Estimación de la
proporción de registros asociados a colegios oficiales
est_oficial_prop <- svymean(
~oficial,
dsgn,
deff = TRUE,
na.rm = TRUE
)
tabla_oficial_prop <- salida(est_oficial_prop, alpha)
knitr::kable(tabla_oficial_prop, caption = "Estimación de la proporción de registros asociados a colegios oficiales")
Estimación de la proporción de registros asociados a colegios
oficiales
| oficial |
0.7 |
0.02 |
1 |
2.69 |
0.66 |
0.73 |
7.3 Estimación de la
proporción de colegios oficiales por dominio
est_oficial_dom <- svyby(
~oficial,
~ESTU_GENERACION.E,
dsgn,
svymean,
deff = TRUE,
na.rm = TRUE
)
est_oficial_dom_tab <- as.data.frame(est_oficial_dom)
est_oficial_dom_aux <- est_oficial_dom_tab[, -1]
tabla_oficial_dom <- salida(est_oficial_dom_aux, alpha)
tabla_oficial_dom <- cbind(Dominio = est_oficial_dom_tab$ESTU_GENERACION.E, tabla_oficial_dom)
knitr::kable(tabla_oficial_dom, caption = "Estimación de la proporción de colegios oficiales por dominio")
Estimación de la proporción de colegios oficiales por
dominio
| GENERACION E - EXCELENCIA NACIONAL |
GENERACION E - EXCELENCIA NACIONAL |
1.00 |
0.00 |
NA |
0.00 |
1.00 |
1.00 |
| GENERACION E - GRATUIDAD |
GENERACION E - GRATUIDAD |
0.69 |
0.03 |
1 |
4.63 |
0.63 |
0.76 |
| NO |
NO |
0.70 |
0.02 |
1 |
3.31 |
0.65 |
0.74 |
8. Interpretación y
conclusiones
A partir del Muestreo Aleatorio Simple aplicado a la ciudad de Cali,
se observa que la media estimada del puntaje en matemáticas fue de
aproximadamente 49.57 puntos. El intervalo de confianza
se ubicó entre 48.67 y 50.47, lo cual
permite afirmar que el promedio poblacional esperado para esta variable
se encuentra dentro de ese rango. Además, el coeficiente de variación
fue de 0.93%, lo que indica que la estimación presenta
un nivel de precisión adecuado.
En cuanto a la variable institucional oficial, se estimó
que aproximadamente 70% de los registros pertenecen a
colegios oficiales. En términos de conteo poblacional, esto equivale
aproximadamente a 1.162878^{4} registros asociados a
instituciones oficiales dentro de la población de Cali. El intervalo de
confianza de la proporción se ubicó entre 66% y
73%, lo que permite observar la posible variación de
esta característica en la población.
Respecto al desempeño en inglés, la categoría con mayor proporción
estimada fue A-, con una participación aproximada de
44.04%. Esto sugiere que, dentro de la población
analizada, dicha categoría concentra la mayor parte de los estudiantes
en relación con el nivel de desempeño en inglés.
En las estimaciones por dominio, se observó que el grupo con mayor
tamaño estimado dentro de la variable ESTU_GENERACION.E fue
NO. Esto indica que dicho dominio tiene mayor
representación dentro de la población estimada de Cali, por lo que sus
resultados tienen un peso importante dentro del análisis general.