Combining lapply, svyby, svyratio to calculate many ratios with confidence intervals

怎甘沉沦 提交于 2019-12-10 16:47:26

问题


I am using the survey package in R to work with the U.S. Census' PUMS dataset for population. I've created a Boolean for each broad industry and a character variable MigrationStatus with three values (Stayed,Left,Entered). I'd like to examine the ratios of workers in each industry by migration status.

This works fine:

AGR_ratio=svyby(~JobAGR, by=~MigrationStatus, denominator=~EmployedAtWork, design=subset(pums_design,EmployedAtWork==1), svyratio, vartype='ci')

But this produces an error:

varlist=names(pums_design$variables)[32:50]
job_ratios = lapply(varlist, function(x) {
  svyby(substitute(~i, list(i = as.name(x))), by=~MigrationStatus, denominator=~EmployedAtWork, design=subset(pums_design,EmployedAtWork==1), svyratio, vartype='ci')
})

#Error in svyby.default(substitute(~i, list(i = as.name(x))), by = ~MigrationStatus,  : 
#object 'byfactor' not found

varlist

#[1] "JobADM" "JobAGR" "JobCON" "JobEDU" "JobENT" "JobEXT" "JobFIN" "JobINF" "JobMED" "JobMFG" "JobMIL" "JobPRF" "JobRET" "JobSCA" "JobSRV"
#[16] "JobTRN" "JobUNE" "JobUTL" "JobWHL"

回答1:


how about this?

# setup
library(survey)
data(api)
dclus1<-svydesign(id=~dnum, weights=~pw, data=apiclus1, fpc=~fpc)

# single example
svyby(~api99, by = ~stype, denominator = ~api00 , dclus1, svyratio)

# multiple example
variables <- c( "api99" , "pcttest" )

# breaks
lapply(variables, function(x) svyby(substitute(~i, list(i = as.name(x))), by=~stype, denominator=~api00, design=dclus1, svyratio, vartype='ci'))

# works
lapply( variables , function( z ) svyby( as.formula( paste0( "~" , z ) ) , by = ~stype, denominator = ~api00 , dclus1, svyratio , vartype = 'ci' ) )

btw you might be interested in this uspums data automation syntax



来源:https://stackoverflow.com/questions/22796372/combining-lapply-svyby-svyratio-to-calculate-many-ratios-with-confidence-inter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!