En este laboratorio afianzaremos algunos conceptos vistos en clase. Antes de iniciar, abrimos las librerias que usaremos en el laboratorio ggplot2, dplyr, ggfortify, rio, describe y establecemos el directorio de trabajo.

Usaremos la base de datos de Bihar Bihar_sample_data.csv, un estado muy poblado de India. La base ha sido obtenida de kaggle. La base de datos cuenta con 39553. Para fines del laboratorio, se asumirá que ese es el total de la población de Bihar.

1. TEOREMA DEL LíMITE CENTRAL

En la población de Bihar, contamos con personas que miden en promedio 142.79 cm, con una desviación estándar de 23.64cm.

poblacion <- data.frame(
  Data = "Poblacion",
  Media = mean(bihardata$height_cm, na.rm = TRUE),
  Desviacion = sd(bihardata$height_cm, na.rm = TRUE)
)

De esa población extaeremos tres muestras de 25 personas cada una. Posteriormente calcularemos los promedios de cada una de las muestras.

muestra1 <- bihardata %>% sample_n(25)
muestra2 <- bihardata %>% sample_n(25)
muestra3 <- bihardata %>% sample_n(25)

Ahora comparemos las desviaciones y medias de cada una de las muestras, con la base original.

resumen1 <- data.frame(
  Data = "Muestra 1",
  Media = mean(muestra1$height_cm, na.rm = TRUE),
  Desviacion = sd(muestra1$height_cm, na.rm = TRUE)
)

resumen2 <- data.frame(
  Data = "Muestra 2",
  Media = mean(muestra2$height_cm, na.rm = TRUE),
  Desviacion = sd(muestra2$height_cm, na.rm = TRUE)
)

resumen3 <- data.frame(
  Data = "Muestra 3",
  Media = mean(muestra3$height_cm, na.rm = TRUE),
  Desviacion = sd(muestra3$height_cm, na.rm = TRUE)
)

compara_muestras <- bind_rows(resumen1, resumen2, resumen3, poblacion)
compara_muestras
##        Data    Media Desviacion
## 1 Muestra 1 139.6650   26.20442
## 2 Muestra 2 135.0381   32.54066
## 3 Muestra 3 134.8091   25.44559
## 4 Poblacion 142.7897   23.64446

Conociendo los valores de la población (142.79 cm, con una desviación estándar de 23.64cm) y asumiendo que cuentan con una distribución normal, también es posible simular tres muestras aleatorias con la función rnorm (la cual genera valores aleatorios).

n = 25 #el tamaño de la muestra o números aleatorios es 25. 
muestra4 = rnorm(n, 142.79, 23.64)
media4 = mean(muestra4)
sd4 = sd(muestra4)
media4
## [1] 144.2543
sd4
## [1] 18.58449

Cada media muestras nos da un valor diferente al valor de la población, debido a que hemos escogido muestras aleatorias. Ojo: Como no hemos colocado una semilla/seed a cada unx le saldrá un dato diferente.
Existe un número infinito de muestras posibles con una población de + 30000.¨ En el mundo real es prácticamente imposible encuestar a más d de una muestra; sin embargo, los software estadísticos permiten explorar estas situaciones hipotéticas.
A continuación, obtendremos 1000 muestras de 381 personas cada una.

set.seed(121) # reproducibilidad
muchas_medias <- replicate(
  1000,
  {
    muestra <- bihardata %>% dplyr::sample_n(381)
    mean(muestra$height_cm, na.rm = TRUE)
  }
)

muchas_sd <- replicate(
  1000,
  {
    muestra <- bihardata %>% dplyr::sample_n(381)
    sd(muestra$height_cm, na.rm = TRUE)
  }
)

Calculamos la media y la desviación estándar de las primeras 30 medias muestrales.

muchas_medias[1:30] #me da los primeros 30 resultados
##  [1] 142.0971 144.8053 142.8722 140.1701 142.1773 142.7437 139.7869 141.1883
##  [9] 143.5907 144.9570 141.3676 143.6898 142.5032 142.6428 143.3834 142.0762
## [17] 144.1827 143.8006 142.4127 146.5233 143.3394 144.2413 141.4088 140.6282
## [25] 140.9187 144.2244 144.0631 142.4437 143.3509 143.9225
mean(muchas_medias)
## [1] 142.8406
muchas_sd[1:30] #me da los primeros 30 resultados
##  [1] 24.25002 21.94223 24.63595 22.43434 23.01065 24.21410 24.97757 23.32347
##  [9] 22.56644 23.34809 24.94898 24.45440 22.43331 23.17635 24.44269 22.59011
## [17] 23.84270 22.53383 22.36512 23.18931 23.43796 24.26372 24.12480 23.47989
## [25] 24.42610 23.41619 24.10483 25.23307 24.49333 24.80412
sd(muchas_sd)
## [1] 1.229039

Para representar gráficamente cada una de las medias muestrales se realizará un histograma. Este histograma se compara con la curva de denisdad de la población real.

media <- 142.79 # media poblacional
sd <- 23.64 #desviacion poblacional
n <- 381 # muestra
error_std <- sd/sqrt(381) #calculo de error estandar
  
hist(muchas_medias,
     xlab = "Media muestral",
     ylab = "Densidad",
     col = "lightcyan",
     xlim = c(130, 155),
     ylim = c(0, 0.4),
     freq = FALSE,
     main = "Histograma de las medias muestrales observadas\n en 1000 muestras de tamaño 381")
curve(dnorm(x, mean = media, sd = error_std),
      col = "blue", lwd = 2, add = TRUE)

Como es posible observar, las medias muestrales siguen una distribución aproximadamente normal. Además, en la mayoría de los casos, estas se encuentran dentro de dos desviaciones estándar respecto a la media poblacional.

EJERCICIO:

¿Qué pasa si reducimos o aumentamos el tamaño de las muestras? ¿Cuánto más grande es la muestra se encuentra más cerca o más lejos de la media poblacional?
Ejercicio1 Replica el proceso, obteniendo 500 muestras de 20 cada una.
Ejercicio2 Replica el proceso, obteniendo 500 muestras de 500 cada una.

2. MUESTREOS

MUESTREO ALEATORIO SIMPLE

En un muestreo aleatorio simple, todos los eleentos tienen la misma probabilidad de ser seleccionados. Asimismo, cada muestra posible del mismo tamaño tiene la misma probabilidad de ocurrir.

mas <- sample(1:nrow(bihardata), size = 100, replace = FALSE) # Puede ser sin remplazo o con remplazo. 
mas # aparece la ubicación en las bases de los casos seleccionados. 
##   [1] 20798 37815 23565 37188 18168 11093 31395 15239  9429 28540 34647 10600
##  [13]  8133 30759 26914 32664 35607 18735 10946 34681  8895 38173 22543 25839
##  [25]   513 37750 33018 26837  8127  9884 18001 14729 27498 18265 21681 16302
##  [37] 11055 23712 16035 14419  1710  2449 15985  6504 32115 39171 29241 29087
##  [49] 18366 28010  1446 23382 29302 34717  6238  3322  2702  4899 15765  5419
##  [61] 23198 33548  9052 36147 21403 29615  8160   931 21824 17079 22965 12906
##  [73] 13210 34903 32487 17461 24589 37436 29165 25931 26513 15048 10833 23185
##  [85]  8979  5596 34617 19794 21896  8498 12009 27601  4389 16769 12960 38447
##  [97] 37475 10903 30893 34464

Imaginemos que queremos hacer seleccionar una poroporcion de casos (5%)

prop <- bihardata %>%
  sample_frac(0.05) 

MUESTREO SISTEMÁTICO

Quiero asegurarme de identificar a personas de manera que pueda abarcar a todas las alturas posibles. Para esto, voy a ordenrar la data según altura.

bihardata <- bihardata %>%
  arrange(height_cm)

Observamos que varias personas miden “1cm”. Probablemente, este sea un error. Vamos a cerrar nuestro rango a personas que miden menos de 1 metro (100cm).

bihardata100 <- subset(bihardata, height_cm > 100)

Con la población que me interesa, procedo a hacer el muestreo aleatorio sistemático, de manera que pueda tener una muestra de 380 personas.
En este caso no me interesa que la muestra se parezca a la población en términos de altura; sino, que priorizo garantizar que se encuentren representadas las diferentes variedades de alturas.

sis <- sys.sample(N=nrow(bihardata100),n=380)
muestrasis <- bihardata100[sis, ]
plot(density(bihardata100$height_cm, na.rm = TRUE), 
     main = "Distribución de Alturas",
     xlab = "Altura (cm)", 
     col = "blue", 
     lwd = 2)

lines(density(muestrasis$height_cm, na.rm = TRUE), 
      col = "green4", 
      lwd = 2)

legend("topright", legend = c("bihardata100", "muestrasis"),
       col = c("blue", "green4"), lwd = 2)

MUESTREO ESTRATIFICADO

Dividiremos a la población en tres estratos según su grupo etario.

bihardata <- bihardata %>%
  filter(!is.na(age)) %>% # elimina filas con NA en age
  mutate(grupo_edad = cut(age,
                          breaks = c(-Inf, 17, 65, Inf),
                          labels = c("Menores de 18", "18 a 65", "65 o más")))
Estratos <- bihardata %>%
  group_by(grupo_edad) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(p = n / sum(n))

Asignación de la muestra proporcional a estratos

nsizeProp<-nstrata(n=380,wh=Estratos[,3],method="proportional")
nsizeProp<-nstrata(n=380,wh=Estratos[,3],method="proportional")

EJERCICIO:

Ejercicio3 Aplicar un diseño de muestreo en dos etapas: Estratificación por sexo y Selección sistemática según peso.