使用R语言srvyr包创建调查对象后人口估计值不符求助
问题:srvyr处理多米尼加家庭收支调查数据时人口估计值与权重总和不符
数据处理流程
我正在用R的srvyr包处理多米尼加家庭收支调查数据,流程如下:
- 读取数据集:
Ingresos <- read_excel("Sociodemograficas_e_Ingresos.xlsx", sheet ="Base") gastos <- read_excel("Gasto_consumo_final_mensual.xlsx")
- 筛选收入数据变量并与支出数据合并:
Ingresos_Filtrado <- Ingresos %>% select (A204,A303,A302, A402, A404, A405, A410,GRUPO_RAMA, GRUPO_OCUPACION, GRUPO_CATEGORIA,GRUPO_EDAD, GRUPO_EDUCACION, GRUPO_SECTOR, GRUPO_EMPLEO, ESCOLARIDAD, SALARIO_PRINCIPAL, A201, A202A, A202B, A202C, A202D, A207, A208, A212, A221, GRUPO_REGION, DES_PROVINCIA,DES_MUNICIPIO, A206, A213, A218, A219, A224,A303, A309, CALLES_ASFALTADAS,ESTRATO , ALUMBRADO_PUBLICO,FACTOR_EXPANSION, VIVIENDA, HOGAR, MIEMBRO, UPM,PET, PEA, QUINTIL, TRIMESTRE, REPLICA, ORDEN_REGION,A102,A401,A401A) Union_Ingresos_Gastos <- merge(x=Ingresos_Filtrado,y=gastos,by=c("TRIMESTRE", "REPLICA", "UPM", "FACTOR_EXPANSION", "VIVIENDA", "HOGAR", "ORDEN_REGION", "QUINTIL"),all.x=TRUE)
- 创建调查设计对象:
survey_2 <- Union_Ingresos_Gastos %>% as_survey_design(ids=UPM,strata=ESTRATO,weigths=FACTOR_EXPANSION,nest=TRUE)
- 分组汇总人口估计:
survey_2 %>% group_by(QUINTIL) %>% summarise(total = survey_total(A401A,level=0.95,na.rm=TRUE)) %>% mutate(Total = sum(total))
得到结果:
# A tibble: 5 × 4 QUINTIL total total_se Total <dbl> <dbl> <dbl> <dbl> 1 1 2213294 82873. 8513968 2 2 2127726 80353. 8513968 3 3 1765902 65479. 8513968 4 4 1483914 71456. 8513968 5 5 923132 54371. 8513968
但直接计算收入数据的权重总和为10299551,符合多米尼加的人口规模:
sum(Ingresos$FACTOR_EXPANSION) [1] 10299551
可能的原因与解决方法
1. A401A变量的定义问题
你用survey_total(A401A)计算的是该变量的加权总和,如果A401A并非全为1的指示变量(比如仅代表劳动力人口、特定年龄组或其他子群体),那么结果自然会小于总人口权重之和。
- 解决:检查
A401A的变量说明,若要计算总人口,应使用survey_total(1, na.rm=TRUE)替代survey_total(A401A, ...)。
2. 数据集合并时的行丢失
merge()函数默认会排除合并键中包含NA的行,即使设置了all.x=TRUE。如果Ingresos_Filtrado中的合并键(如QUINTIL、FACTOR_EXPANSION等)存在NA值,这些行会被排除在Union_Ingresos_Gastos之外,导致总权重减少。
- 解决:
- 检查合并键的NA情况:
colSums(is.na(Ingresos_Filtrado[, c("TRIMESTRE", "REPLICA", "UPM", "FACTOR_EXPANSION", "VIVIENDA", "HOGAR", "ORDEN_REGION", "QUINTIL")])) - 若有NA,根据数据说明处理缺失值,或调整合并键(比如移除不必要的键,如
FACTOR_EXPANSION——个人权重不应作为家庭级支出数据的合并键)。
- 检查合并键的NA情况:
3. 调查设计的参数错误
你在as_survey_design()中拼写错误:weigths应为weights。如果实际代码中确实存在此错误,权重未被正确加载,会导致估计值偏差。
- 解决:修正参数拼写:
survey_2 <- Union_Ingresos_Gastos %>% as_survey_design(ids=UPM,strata=ESTRATO,weights=FACTOR_EXPANSION,nest=TRUE)
4. 合并键选择不当
收入数据是个人层面(包含MIEMBRO字段),而支出数据通常是家庭层面。你使用的合并键包含FACTOR_EXPANSION(个人权重)和QUINTIL(个人/家庭分组),可能导致不必要的匹配失败或重复行。
- 解决:改用家庭层面的唯一标识作为合并键,比如:
Union_Ingresos_Gastos <- merge(x=Ingresos_Filtrado,y=gastos,by=c("TRIMESTRE", "REPLICA", "UPM", "VIVIENDA", "HOGAR"),all.x=TRUE)
内容的提问来源于stack exchange,提问作者almr27
相关产品推荐
相关产品推荐

