Muestras complejas con R

Muestras complejas con R

Por Julio César Martínez Sánchez

Introducción

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.

Muestra compleja

El diseño de una encuesta es complejo si tiene:

Varias etapas de selección, probabilidad de selección desigual y estratificación alt tag Fuente: INEGI (2007)

Instalación de Paquetes

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"))

Variables

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)),]

Linealización por Series de Taylor

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).

Promedios

Escenario 1: Muestreo aleatorio simple

  • Paso 1. Definir y guardar el esquema de muestreo con la función svydesign
    ds_enoe1<-svydesign(id=~1,weight=~FAC,data=SD)
  • Paso 2. Obtener el estimador (promedio de la variable HRSOCUP) y su efecto de diseño con la función svymean
    svy1<-svymean(~HRSOCUP, ds_enoe1, deff=TRUE)
    svy1
    ##              mean        SE   DEff
    ## HRSOCUP 40.828987  0.067442 2.2005
    
  • Paso 3. Se calcula el coeficiente de variación para determinar la confiabilidad. De acuerdo al INEGI, si dicho coeficiente es menor a 15%, entonces el dato es de buena calidad (ver comunicado).
    cv1<-cv(svy1)*100
    cv1
    ##           HRSOCUP
    ## HRSOCUP 0.1651825
    

Para los siguientes escenarios se repiten los pasos anteriores

Escenario 2: Muestreo por conglomerados

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

Escenario 3: Muestreo estratificado

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

Escenario 4: Muestreo complejo

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

Comparación de los 4 escenarios

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"

Totales

Para calcular el coeficiente de variación en tabulados, el primer paso es seleccionar la población de referencia. En este ejemplo se analiza el nivel de escolaridad de las mujeres ocupadas.
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

Tasas

Para hacer este ejercicio, se estima la Tasa de trabajo asalariado, la cual toma como referncia a la población ocupada. Para calcular este indicador, se requiere la variable REMUNE2C
#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.

Referencias