Julio César Martínez Sánchez
En esta sección se presenta el código en R para generar los cuadros del artículo: Una aproximación metodológica al uso de datos de encuestas en hogares .
Para poder hacer las gráficas correspondientes se requieren los siguientes paquetes: data.table,foreign, questionr, survey, base.
Así, el primer paso es cargar las librerías que se van a utilizar
library(data.table)
library(foreign)
library(questionr)
library(survey)
library(base)
Ahora se debe de cargar la base sdemt116.dbf
, la cual está disponible en INEGI. Sin embargo, con el siguiente código se puede automatizar este proceso de tal manera que se puede descargar, descomprimir y cargar la base sdemt116.dbf
a partir de un archivo temporal:
temporal <- tempfile()
download.file("http://www.beta.inegi.org.mx/contenidos/proyectos/enchogares/regulares/enoe/microdatos/enoe_15ymas/2016/2016trim1_dbf.zip",temporal)
files = unzip(temporal, list=TRUE)$Name
unzip(temporal, files=files[grepl("dbf",files)])
SDEMT116 <- data.frame(read.dbf("sdemt116.dbf"))
Antes de iniciar con el análisis conviene adecuar el formato de las variables que se van a utilizar. Para tener una mejor referencia las características de cada variable, se recomienda consultar la descripción de archivos, disponible en: FD_ENOE.
v1 <- c("SEX","NIV_INS", "E_CON", "POS_OCU")
for (n in 1:dim(as.array(v1))) {
SDEMT116[,v1[n]] <-as.factor(SDEMT116[,v1[n]])
}
v2 <- c("HRSOCUP","EDA", "R_DEF", "C_RES")
for (n2 in 1:dim(as.array(v2))) {
SDEMT116[,v2[n2]] <-as.numeric(as.character(SDEMT116[,v2[n2]]))
}
Se selecciona la población de referencia que es: población ocupada mayor de 15 años con entrevista completa y condición de residencia válida.
SDEMT116$filtro<- 0
SDEMT116$filtro[SDEMT116$CLASE2 == 1 & SDEMT116$EDA>=15 & SDEMT116$EDA<=98 & SDEMT116$R_DEF==0 & (SDEMT116$C_RES==1 | SDEMT116$C_RES==3)] <- 1
SDEMT116$filtro <-as.numeric(SDEMT116$filtro)
SD<-SDEMT116[which(SDEMT116$filtro==1),]
Para mostrar el efecto del esquema de muestreo se suponen 4 escenarios:
Las simulaciones se guardarán provisionalmente en dos listas: ST y Boot. Sin embargo, al final se crea una más denominada Simulacion
, la cual tendrá los resultados de ambas simulaciones.
ST = list()
Boot = list()
Simulacion=list()
for (i in 1:4){
options(survey.lonely.psu="adjust")
if(i==1){ds<-svydesign(id=~1,weight=~1,data=SD)}
if(i==2){ds<-svydesign(id=~UPM,weight=~FAC,data=SD)}
if(i==3){ds<-svydesign(id=~1, strata=~EST_D, weight=~FAC, data=SD, nest=TRUE)}
if(i==4){ds<-svydesign(id=~UPM, strata=~EST_D, weight=~FAC, data=SD, nest=TRUE)}
svy<-round(svymean(~HRSOCUP, ds, deff=TRUE),2)
cv<-round(data.frame(cv(svy)*100),digits=2)
ST[[i]] <- data.frame(svy,cv)
}
R1 = do.call(rbind, ST)
colnames(R1)[4] <- "CV"
row.names(R1)<-c("MAS","Conglomerados","Estratificado","Est/Cong")
Simulacion$Taylor<-R1
for (j in 1:4){
if(j==1){boot<-svydesign(id=~1,weight=~1, data=SD, nest=TRUE)}
if(j==2){boot<-svydesign(id=~UPM,weight=~FAC, data=SD, nest=TRUE)}
if(j==3){boot<-svydesign(id=~1,strata=~EST_D,weight=~FAC, data=SD, nest=TRUE)}
if(j==4){boot<-svydesign(id=~UPM,strata=~EST_D,weight=~FAC, data=SD, nest=TRUE)}
boot_design<-as.svrepdesign (boot,type="bootstrap",replicates=100)
svy<-round(svymean(~HRSOCUP, boot_design, deff=TRUE),2)
cv<-round(data.frame(cv(svy)*100),digits=2)
dat<-data.frame(svy,cv)
Boot[[j]] <- dat
}
R2 = do.call(rbind, Boot)
colnames(R2)[4] <- "CV"
row.names(R2)<-c("MAS","Conglomerados","Estratificado","Est/Cong")
Simulacion$Bootstrap<-R2
Debido a la naturaleza del Boostrap, se requiere una gran cantidad de memoria RAM por lo que la simulación puede tardar.
SD2<-SD[which(SD$SEX == 2),]
tb<-svydesign(id=~UPM, strata=~EST_D, weight=~FAC, data=SD2, nest=TRUE)
options(survey.lonely.psu="adjust")
svy<-round(svytotal(~factor(CS_P13_1), tb, deff=TRUE), digits = 2)
cv<-round(data.frame(cv(svy)*100),digits=2)
R3<-data.frame(svy,cv);colnames(R3)[4] <- "CV"
Simulacion$Tabulado<-R3
Finalmente, el resultado del cálculo de la media vía series de Taylor y Boostrap, así como el tabulado se pueden visualizar de manera general
Simulacion
O bien, por separado
Simulacion$Taylor
Simulacion$Bootstrap
Simulacion$Tabulado
ds_enoe<-svydesign(id=~UPM, strata=~EST_D, weight=~FAC, data=SD, nest=TRUE)
options(survey.lonely.psu="adjust")
glmsvy1 <- svyglm(HRSOCUP~SEX+NIV_INS+E_CON+POS_OCU+EDA, design=ds_enoe)
summary(glmsvy1, df.resid = degf(ds_enoe))
glmsvy2 <- glm(HRSOCUP~SEX+NIV_INS+E_CON+POS_OCU+EDA, data=SD)
summary(glmsvy2)
boot_design<-as.svrepdesign (ds_enoe, type="bootstrap",replicates=100)
options(survey.lonely.psu="adjust")
glmsvy3 <- svyglm(HRSOCUP~SEX+NIV_INS+E_CON+POS_OCU+EDA, design=boot_design)
summary(glmsvy3, df.resid = degf(boot_design))
confint(glmsvy3, level = 0.95, method = c("Wald"))
Para generar la gráfica 2 se generó el siguiente código:
i=100
m1<-sample(S$HRSOCUP,size=length(S$HRSOCUP)*i,replace=TRUE)
m2 <- apply(matrix(m1,i,length(S$HRSOCUP)),1,mean)
g2 = ggplot( data.frame(m2),aes(m2) ) +
geom_histogram(aes(y=..density..),binwidth=(diff(range(m2))/30)) +
geom_density(color="red")+xlab("Promedio")+ylab("Frecuencia")
plot(g2)