Комбинируя лапли, свыбы, свырацио вычислить множество соотношений с доверительными интервалами
Я использую пакет survey
в R для работы с набором данных Pums переписи населения США для населения. Я создал логическое значение для каждой широкой отрасли и символьную переменную MigrationStatus
с тремя значениями (Stayed
,Left
,Entered
). Я хотел бы рассмотреть соотношение рабочих в каждой отрасли по миграционному статусу.
Это прекрасно работает:
AGR_ratio=svyby(~JobAGR, by=~MigrationStatus, denominator=~EmployedAtWork, design=subset(pums_design,EmployedAtWork==1), svyratio, vartype='ci')
Но это приводит к ошибке:
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 ответ:
Как насчет этого?
# 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' ) )
Кстати, вас может заинтересовать этот синтаксис автоматизации данных uspums