📌 1. Carga de datos y librerías

Primeros registros de la base de datos
PERIODO ESTU_CONSECUTIVO ESTU_ESTUDIANTE ESTU_MCPIO_RESIDE COLE_CARACTER
20194 SB11201940031558 ESTUDIANTE SANTA ANA TÉCNICO/ACADÉMICO
20194 SB11201940303339 ESTUDIANTE BOGOTÁ D.C. ACADÉMICO
20194 SB11201940255017 ESTUDIANTE CARTAGENA DE INDIAS TÉCNICO/ACADÉMICO
20194 SB11201940154799 ESTUDIANTE BOGOTÁ D.C. ACADÉMICO
20194 SB11201940280831 ESTUDIANTE BOGOTÁ D.C. TÉCNICO/ACADÉMICO
20194 SB11201940212273 ESTUDIANTE SOLEDAD

📌 2. Filtrado y limpieza de datos

# Se filtra la base para la ciudad de Pasto
base_pasto <- subset(estudiantes, ESTU_MCPIO_RESIDE == "PASTO")

# Se seleccionan únicamente las variables de interés
base_pasto <- base_pasto[, c("PUNT_MATEMATICAS", "PUNT_INGLES")]

# Se eliminan valores faltantes
base_pasto <- na.omit(base_pasto)

# Se verifica la estructura
str(base_pasto)
## 'data.frame':    4551 obs. of  2 variables:
##  $ PUNT_MATEMATICAS: int  54 63 37 72 24 77 53 49 52 55 ...
##  $ PUNT_INGLES     : int  49 65 36 56 43 69 44 62 61 43 ...
head(base_pasto)
##      PUNT_MATEMATICAS PUNT_INGLES
## 621                54          49
## 623                63          65
## 638                37          36
## 650                72          56
## 768                24          43
## 1204               77          69

📌 3. Función de tamaño de muestra

Tamaño de muestra para total

\[ n = \frac{Z_{\alpha/2}^2 \cdot N^2 \cdot S^2}{e^2 + Z_{\alpha/2}^2 \cdot N \cdot S^2} \]

Tamaño de muestra para media

\[ n = \frac{Z_{\alpha/2}^2 \cdot S^2}{e^2 + \frac{Z_{\alpha/2}^2 \cdot S^2}{N}} \]

# Se define la función de tamaño de muestra
n.mas <- function(tipo, N, s, e, 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)
  }
}

📌 4. Parámetros para el cálculo

# Tamaño poblacional
N <- nrow(base_pasto)

# Desviaciones estándar
s_mat <- sd(base_pasto$PUNT_MATEMATICAS)
s_ing <- sd(base_pasto$PUNT_INGLES)

# Parámetros
e <- 5
alpha <- 0.05

📌 5. Cálculo del tamaño de muestra

n_mat <- n.mas("m", N, s_mat, e, alpha)
n_ing <- n.mas("m", N, s_ing, e, alpha)

n <- max(n_mat, n_ing)

📌 6. Selección de muestra (Método 1)

s.mas <- function(base, n, seed){
  N <- nrow(base)
  set.seed(seed)
  
  base$u <- runif(N)
  base <- base[order(base$u),]
  base <- base[1:n,]
  
  base$pik <- n/N
  
  return(base)
}

muestra <- s.mas(base_pasto, n, 123)

muestra
##        PUNT_MATEMATICAS PUNT_INGLES            u        pik
## 449513               66          55 0.0000653367 0.00461437
## 46981                49          48 0.0004653491 0.00461437
## 10162                53          45 0.0006247733 0.00461437
## 471029               69          61 0.0008289637 0.00461437
## 381036               47          44 0.0011523850 0.00461437
## 125668               72          72 0.0011558197 0.00461437
## 81231                45          39 0.0011916284 0.00461437
## 120768               33          25 0.0024788103 0.00461437
## 302842               40          39 0.0035159516 0.00461437
## 206345               54          53 0.0035354947 0.00461437
## 78073                55          59 0.0036842276 0.00461437
## 99108                60          61 0.0038963431 0.00461437
## 442561               59          64 0.0039615233 0.00461437
## 89020                61          55 0.0041069405 0.00461437
## 421290               70          68 0.0042777238 0.00461437
## 426156               51          55 0.0043652093 0.00461437
## 433639               20          28 0.0046066262 0.00461437
## 189254               41          39 0.0046089741 0.00461437
## 124723               52          62 0.0046381508 0.00461437
## 363650               48          47 0.0048108224 0.00461437
## 135043               52          55 0.0048417395 0.00461437

📌 7. Selección de muestra (Fan-Muller - Método 2)

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_pasto, n, 123)
muestra2 <- base_pasto[which(m == 1),]
muestra2
##        PUNT_MATEMATICAS PUNT_INGLES
## 10162                53          45
## 46981                49          48
## 78073                55          59
## 81231                45          39
## 89020                61          55
## 99108                60          61
## 120768               33          25
## 125668               72          72
## 189254               41          39
## 206345               54          53
## 302842               40          39
## 357837               44          47
## 363650               48          47
## 381036               47          44
## 421290               70          68
## 426156               51          55
## 433639               20          28
## 442561               59          64
## 449513               66          55
## 471029               69          61
## 532384               70          55

📌 8. Función de salida

Coeficiente de variación

\[ CV = 100 \times \frac{SE(\hat{\theta})}{\hat{\theta}} \]

Intervalo de confianza

\[ IC = \hat{\theta} \pm Z_{\alpha/2} \cdot SE(\hat{\theta}) \]

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
  
  return(round(est,2))
}

📌 9. Diseño muestral

muestra$ind <- 1
muestra$Fexp <- 1 / muestra$pik

dsgn <- svydesign(
  id = ~1,
  fpc = ~rep(N, nrow(muestra)),
  data = muestra,
  weights = ~Fexp
)

📌 10. Estimaciones

# Totales
est_total_mat <- svytotal(~PUNT_MATEMATICAS, dsgn)
salida(est_total_mat, 0.05)
##                     total      se   cv ic_low   ic_upp
## PUNT_MATEMATICAS 237735.6 12465.8 5.24 213303 262168.1
est_total_ing <- svytotal(~PUNT_INGLES, dsgn)
salida(est_total_ing, 0.05)
##                total       se  cv   ic_low   ic_upp
## PUNT_INGLES 232751.1 12332.71 5.3 208579.5 256922.8
# Medias
est_media_mat <- svymean(~PUNT_MATEMATICAS, dsgn)
salida(est_media_mat, 0.05)
##                   mean   se   cv ic_low ic_upp
## PUNT_MATEMATICAS 52.24 2.74 5.24  46.87  57.61
est_media_ing <- svymean(~PUNT_INGLES, dsgn)
salida(est_media_ing, 0.05)
##              mean   se  cv ic_low ic_upp
## PUNT_INGLES 51.14 2.71 5.3  45.83  56.45

📌 11. Tabla resumen

Tabla resumen de parámetros y resultados
Objeto Valor Descripcion
N 4551.00 Tamaño total de la población de estudiantes en Pasto
s_mat 11.60 Desviación estándar del puntaje en matemáticas
s_ing 11.70 Desviación estándar del puntaje en inglés
e 5.00 Error máximo permitido en la estimación
alpha 0.05 Nivel de significancia utilizado
n_mat 21.00 Tamaño de muestra requerido para estimar la media en matemáticas
n_ing 21.00 Tamaño de muestra requerido para estimar la media en inglés
n_final 21.00 Tamaño de muestra final seleccionado (máximo entre ambas variables)

📌 12. Tabla de estimaciones

Tabla de estrimaciones
Variable Total Media
PUNT_MATEMATICAS Matemáticas 237735.6 52.23810
PUNT_INGLES Inglés 232751.1 51.14286

📌 13. Fórmulas


Estimador del total

\[ \hat{T} = \sum_{i=1}^{n} w_i y_i \]

Estimador de la media

\[ \bar{y} = \frac{\sum w_i y_i}{\sum w_i} \]