Por Julio César Martínez Sánchez
El objetivo de este tutorial es introducir al usuario en el manejo de muestras complejas con R. Para ello se analizan algunos indicadores de la población ocupada mediante la Linealización por Series de Taylor. Además, para mostrar el efecto que tiene el diseño estadístico se plantean cuatro escenarios de muestreo: aleatorio simple, por conglomerados, estratificado, complejo.
Se usan las bases de datos de la Encuesta Nacional de Ocupación y Empleo (ENOE) del primer trimestre de 2016, las cuales se encuentran en la página de INEGI.
El diseño de una encuesta es complejo si tiene:
Varias etapas de selección, probabilidad de selección desigual y estratificación Fuente: INEGI (2007)
Para poder analizar los datos de las encuestas que complejas se requieren los siguientes paquetes: data.table, foreign, questionr, survey. En caso de que no estén disponibles, se pueden instalar con el siguiente comando:
install.packages(c("foreign","data.table","questionr","survey"))
Cargar las librerias que se van a utilizar
library(data.table)
library(foreign)
library(questionr)
library(survey)
Definir el directorio raiz y cargar las bases de datos
setwd("C:/Users/JC/Desktop/D/1")
SDEMT116<-data.frame(read.dbf("sdemt116.dbf"))
Para iniciar con el análisis conviene identificar las variables que se van a utilizar y adecuar el formato. En este caso la población de referencia es la población ocupada (CLASE2) y los variables que se van a utilizar son sexo (SEX), edad (EDA) y el ingreso (ING7C). Además, para que un registro de la encuesta sea válido, debe de tratarse de un residente habitual (C_RES) con entrevista completa (R_DEF). Para fines prácticos, conviene que estas variables sean8 numéricas, por lo tanto se adecúan con este formato:
#Convertir las variables a numéricas
SDEMT116$R_DEF <-as.numeric(as.character(SDEMT116$R_DEF))
SDEMT116$C_RES <-as.numeric(as.character(SDEMT116$C_RES))
SDEMT116$EDA <-as.numeric(as.character(SDEMT116$EDA))
SDEMT116$SEX <-as.numeric(as.character(SDEMT116$SEX))
SDEMT116$CLASE2 <-as.numeric(as.character(SDEMT116$CLASE2))
SDEMT116$HRSOCUP <-as.numeric(as.character(SDEMT116$HRSOCUP))
Para tener a la población de referencia se crea una base únicamente con los registros válidos, es decir, con los ocupados que satisfacen el criterio de ser residentes habituales con entrevista completa y mayores de 15 años.
SD<-SDEMT116[which(SDEMT116$CLASE2 == 1 &
SDEMT116$EDA>=15 & SDEMT116$EDA<=98 &
SDEMT116$R_DEF==0 &
(SDEMT116$C_RES==1 | SDEMT116$C_RES==3)),]
El objetivo de esta técnica es calcular la varianza de los estimadores a partir de su desagregación en partes más simples y fáciles de manejar usando los primeros términos de la serie de Taylor. Para profundizar en los características teóricas y en la explicación matemática, se recomienda consultar: Heeringa et al (2010).
svydesign
ds_enoe1<-svydesign(id=~1,weight=~FAC,data=SD)
svymean
svy1<-svymean(~HRSOCUP, ds_enoe1, deff=TRUE)
svy1
## mean SE DEff
## HRSOCUP 40.828987 0.067442 2.2005
cv1<-cv(svy1)*100
cv1
## HRSOCUP
## HRSOCUP 0.1651825
Para los siguientes escenarios se repiten los pasos anteriores
ds_enoe2<-svydesign(id=~UPM,weight=~FAC,data=SD)
svy2<-svymean(~HRSOCUP, ds_enoe2, deff=TRUE)
cv2<-cv(svy2)*100
cv2
## HRSOCUP
## HRSOCUP 0.2532425
ds_enoe3<-svydesign(id=~1, strata=~EST_D, weight=~FAC, data=SD, nest=TRUE)
svy3<-svymean(~HRSOCUP, ds_enoe3, deff=TRUE)
cv3<-cv(svy3)*100
cv3
## HRSOCUP
## HRSOCUP 0.1634424
ds_enoe4<-svydesign(id=~UPM, strata=~EST_D, weight=~FAC, data=SD, nest=TRUE)
svy4<-svymean(~HRSOCUP, ds_enoe4, deff=TRUE)
cv4<-cv(svy4)*100
cv4
## HRSOCUP
## HRSOCUP 0.2380883
x1<-c(cv1,cv2,cv3, cv4);x2<-c("MAS","Congl","Estr","Complex");res <- rbind(x1,x2)
res
## [,1] [,2] [,3]
## x1 "0.165182469409827" "0.253242549488284" "0.163442360104138"
## x2 "MAS" "Congl" "Estr"
## [,4]
## x1 "0.238088262621338"
## x2 "Complex"
SD2<-SD[which(SD$SEX == 2),]
#Definir el esquema de muestreo: Estratificado y por conglomerados
ds_enoe8<-svydesign(id=~UPM, strata=~EST_D, weight=~FAC, data=SD2, nest=TRUE)
#Se define el método para el caso de 1 UPM en los estratos
options(survey.lonely.psu="adjust")
#Obtener la estimación
svy8<-svytotal(~factor(ING7C), ds_enoe8, deff=TRUE)
#Calcular el coeficiente de variación
cv8<-cv(svy8)*100
#Resultados
svy8
## total SE DEff
## factor(ING7C)1 4181089 61753 3.9797
## factor(ING7C)2 5654333 70684 4.2720
## factor(ING7C)3 3108932 47492 2.9560
## factor(ING7C)4 1845717 38374 3.0155
## factor(ING7C)5 885485 26717 2.8879
## factor(ING7C)6 1375955 36827 3.6278
## factor(ING7C)7 2245216 47430 3.8756
cv8
## factor(ING7C)1 factor(ING7C)2 factor(ING7C)3 factor(ING7C)4 factor(ING7C)5
## 1.476947 1.250088 1.527600 2.079103 3.017256
## factor(ING7C)6 factor(ING7C)7
## 2.676500 2.112471
#Se cambia el formato de la variable
SD$REMUNE2C<-as.numeric(as.character(SD$REMUNE2C))
#Se crea una variable binaria
SD$Tasa_trabajo_asalariado<-0
SD$Tasa_trabajo_asalariado[SD$REMUNE2C==1]<-1
#Definir el esquema de muestreo: Estratificado y por conglomerados
ds_enoe6<-svydesign(id=~UPM, strata=~EST_D, weight=~FAC, data=SD, nest=TRUE)
#Obtener la estimación
svy6<-svymean(~Tasa_trabajo_asalariado, ds_enoe6, deff=TRUE)
#Calcular el coeficiente de variación
cv6<-cv(svy6)*100
#Resultados
svy6
## mean SE DEff
## Tasa_trabajo_asalariado 0.6445743 0.0024044 4.2215
cv6
## Tasa_trabajo_asalariado
## Tasa_trabajo_asalariado 0.3730274
Para validar los resultados, se pueden consultar los tabulados básicos.
El código se encuentra en la siguiente página: ComplexSurvey_UNAM.