2.8 Práctica en R

En esta sección se utilizarán las funciones estudiadas en el capítulo anterior para la manipulación de la base de datos de ejemplo. Inicialmente, se cargarán las librerías ggplot2 que permitirá generar gráficos de alta calidad en R, TeachingSampling que permite tomar muestras probabilísticas utilizando los diseños de muestreo usuales, survey y srvyr que permitirán definir los diseños muestrales y por último dplyr que permite la manipulación de las bases de datos.

library(ggplot2)
library(TeachingSampling)
library(dplyr)
library(survey)
library(srvyr)

Una vez cargada las librerías, se procede a calcular la cantidad de personas en la base de datos, el total de ingresos y total de gastos para cada UPM dentro de cada estrato:

data('BigCity')

 FrameI <- BigCity %>% group_by(PSU) %>%
 summarise(Stratum = unique(Stratum),
           Persons = n(),
           Income = sum(Income),
           Expenditure = sum(Expenditure))
             
attach(FrameI)
head(FrameI, 10)
PSU Stratum Persons Income Expenditure
PSU0001 idStrt001 118 70911.72 44231.78
PSU0002 idStrt001 136 68886.60 38381.90
PSU0003 idStrt001 96 37213.10 19494.78
PSU0004 idStrt001 88 36926.46 24030.74
PSU0005 idStrt001 110 57493.88 31142.36
PSU0006 idStrt001 116 75272.06 43473.28
PSU0007 idStrt001 68 33027.84 21832.66
PSU0008 idStrt001 136 64293.02 47660.02
PSU0009 idStrt001 122 33156.14 23292.16
PSU0010 idStrt002 70 65253.78 37114.76

Ahora bien, para calcular los tamaños poblacionales de los estratos (NIh) y los tamaños de muestra dentro de cada estrato (nIh), se realiza de la siguiente manera:

sizes = FrameI %>% group_by(Stratum) %>%
        summarise(NIh = n(),
        nIh = 2,
        dI = NIh/nIh)
        
NIh <- sizes$NIh
nIh <- sizes$nIh
head(sizes, 10)
Stratum NIh nIh dI
idStrt001 9 2 4.5
idStrt002 11 2 5.5
idStrt003 7 2 3.5
idStrt004 13 2 6.5
idStrt005 11 2 5.5
idStrt006 5 2 2.5
idStrt007 14 2 7.0
idStrt008 7 2 3.5
idStrt009 8 2 4.0
idStrt010 8 2 4.0

Si se desea extraer una muestra probabilística bajo un diseño aleatorio simple estratificado, se procede a utilizar la función S.STSI de la librería TeachingSampling como se muestra a continuación:

samI <- S.STSI(Stratum, NIh, nIh)
UI <- levels(as.factor(FrameI$PSU))
sampleI <- UI[samI]

Ahora bien, con la función left_join se procede a pegar los tamaños muestrales a aquellas UPM’s que fueron seleccionadas en la muestra:

FrameII <- left_join(sizes, 
            BigCity[which(BigCity$PSU %in% sampleI), ])
attach(FrameII)

Una vez se tiene la base de datos con la muestra de UMP’s. se selecciona aquellas variables que son de inetrés para el estudio como sigue a continuación:

head(FrameII, 10) %>% select(Stratum:Zone)
Stratum NIh nIh dI HHID PersonID PSU Zone
idStrt001 9 2 4.5 idHH00001 idPer01 PSU0001 Rural
idStrt001 9 2 4.5 idHH00001 idPer02 PSU0001 Rural
idStrt001 9 2 4.5 idHH00001 idPer03 PSU0001 Rural
idStrt001 9 2 4.5 idHH00001 idPer04 PSU0001 Rural
idStrt001 9 2 4.5 idHH00001 idPer05 PSU0001 Rural
idStrt001 9 2 4.5 idHH00002 idPer01 PSU0001 Rural
idStrt001 9 2 4.5 idHH00002 idPer02 PSU0001 Rural
idStrt001 9 2 4.5 idHH00002 idPer03 PSU0001 Rural
idStrt001 9 2 4.5 idHH00002 idPer04 PSU0001 Rural
idStrt001 9 2 4.5 idHH00002 idPer05 PSU0001 Rural

Luego de tener la información muestral de la primera etapa en la base FrameII se procede a calcular los tamaños de muestra dentro de cada UPM’s. En este caso, a modo de ejemplo, se tomará el 10% del tamaño de la UPM y se utilizará la función ceiling la cual aproxima al siguiente entero.

HHdb <- FrameII %>% 
        group_by(PSU) %>%
        summarise(Ni = length(unique(HHID)))
        
Ni <- as.numeric(HHdb$Ni)
ni <- ceiling(Ni * 0.1)
sum(ni)
## [1] 704

Teniendo el vector de tamaños de muestra para cada UMP, se procede a realizar la selección mediante un muestreo aleatorio simple con la función S.SI de la librería TeachingSampling. A modo ilustrativo, la selección en la segunda etapa del diseño se realizará, inicialmente para la primera UPM. Posterior a eso, se realizará un ciclo “for” para hacerlo con las demás UPM’s. Para la primera UPM se realiza de la siguiente manera:

sam = S.SI(Ni[1], ni[1])

clusterII = FrameII[which(FrameII$PSU == sampleI[1]),]

sam.HH <- data.frame(HHID = unique(clusterII$HHID)[sam])

clusterHH <- left_join(sam.HH, clusterII, by = "HHID")

clusterHH$dki <- Ni[1] / ni[1]

clusterHH$dk <- clusterHH$dI * clusterHH$dki

sam_data = clusterHH
head(sam_data, 10) %>% select(Stratum:Zone)
Stratum NIh nIh dI PersonID PSU Zone
idStrt001 9 2 4.5 idPer01 PSU0001 Rural
idStrt001 9 2 4.5 idPer02 PSU0001 Rural
idStrt001 9 2 4.5 idPer03 PSU0001 Rural
idStrt001 9 2 4.5 idPer04 PSU0001 Rural
idStrt001 9 2 4.5 idPer05 PSU0001 Rural
idStrt001 9 2 4.5 idPer01 PSU0001 Rural
idStrt001 9 2 4.5 idPer02 PSU0001 Rural
idStrt001 9 2 4.5 idPer03 PSU0001 Rural
idStrt001 9 2 4.5 idPer04 PSU0001 Rural
idStrt001 9 2 4.5 idPer05 PSU0001 Rural

Para las demás UPM’s seleccionadas en la etapa 1,

for (i in 2:length(Ni)) {
  sam = S.SI(Ni[i], ni[i])
  
  clusterII = FrameII[which(FrameII$PSU == sampleI[i]),]
  
  sam.HH <- data.frame(HHID = unique(clusterII$HHID)[sam])
  
  clusterHH <- left_join(sam.HH, clusterII, by = "HHID")
  
  clusterHH$dki <- Ni[i] / ni[i]
  
  clusterHH$dk <- clusterHH$dI * clusterHH$dki
  
  data1 = clusterHH
  
  sam_data = rbind(sam_data, data1)
}
encuesta <- sam_data

attach(encuesta)

Una vez se obtiene la muestra (como se mostró anteriormente), el paso siguiente es definir el diseño utilizado y guardarlo como un objeto en R para posteriormente poderlo utilizar y realizar el proceso de estimación de parámetros y cálculo de indicadores. Para realizar esta tarea, se utilizará el paquete srvyr el cual ya fue definido en el capítulo anterior. Para este ejemplo, el diseño de muestreo utilizado fue un estratificado-multietápico en el cual, los estratos correspondieron a la variable Stratum, las UPM’s correspondieron a la variable PSU, los factores de expansión están en la variable dk y por último, se le indica a la función as_survey_design que las UPM’s están dentro de los estrato con el argumento nest = T. A continuación, se presenta el código computacional:

diseno <- encuesta %>%
  as_survey_design(
    strata = Stratum,
    ids = PSU,
    weights = dk,
    nest = T
  )

Ya definido el diseño de muestreo como un objeto de R se puede empezar a extraer información del mismo. Por ejemplo, se pueden extraer los pesos de muestreo de dicho diseño con la función weights y luego sumarlos para revisar hasta cuánto me está expandiendo mi muestra. El código es el siguiente:

sum(weights(diseno))
## [1] 153533.5

Como se puede observar, el tamaño poblacional estimado utilizando el diseño propuesto es de \(140579.2\). Sin embargo, el tamaño poblacional de la base BigCity es de \(150266\). Es normal que esto suceda pero debe ser corregido puesto que la suma de los factores de expansión debe sumar el total de la población. La solución para esto es calibrar los pesos de muestreo que se abordará a continuación.