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')
<- BigCity %>% group_by(PSU) %>%
FrameI 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:
= FrameI %>% group_by(Stratum) %>%
sizes summarise(NIh = n(),
nIh = 2,
dI = NIh/nIh)
<- sizes$NIh
NIh <- sizes$nIh 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:
<- S.STSI(Stratum, NIh, nIh)
samI <- levels(as.factor(FrameI$PSU))
UI <- UI[samI] sampleI
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:
<- left_join(sizes,
FrameII which(BigCity$PSU %in% sampleI), ])
BigCity[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.
<- FrameII %>%
HHdb group_by(PSU) %>%
summarise(Ni = length(unique(HHID)))
<- as.numeric(HHdb$Ni)
Ni <- ceiling(Ni * 0.1)
ni 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:
= S.SI(Ni[1], ni[1])
sam
= FrameII[which(FrameII$PSU == sampleI[1]),]
clusterII
<- data.frame(HHID = unique(clusterII$HHID)[sam])
sam.HH
<- left_join(sam.HH, clusterII, by = "HHID")
clusterHH
$dki <- Ni[1] / ni[1]
clusterHH
$dk <- clusterHH$dI * clusterHH$dki
clusterHH
= clusterHH sam_data
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)) {
= S.SI(Ni[i], ni[i])
sam
= FrameII[which(FrameII$PSU == sampleI[i]),]
clusterII
<- data.frame(HHID = unique(clusterII$HHID)[sam])
sam.HH
<- left_join(sam.HH, clusterII, by = "HHID")
clusterHH
$dki <- Ni[i] / ni[i]
clusterHH
$dk <- clusterHH$dI * clusterHH$dki
clusterHH
= clusterHH
data1
= rbind(sam_data, data1)
sam_data
}<- sam_data
encuesta
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:
<- encuesta %>%
diseno 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.