You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R语言srvyr包创建调查对象后人口估计值不符求助

问题:srvyr处理多米尼加家庭收支调查数据时人口估计值与权重总和不符

数据处理流程

我正在用R的srvyr包处理多米尼加家庭收支调查数据,流程如下:

  1. 读取数据集:
Ingresos    <- read_excel("Sociodemograficas_e_Ingresos.xlsx", sheet ="Base")
gastos <- read_excel("Gasto_consumo_final_mensual.xlsx")
  1. 筛选收入数据变量并与支出数据合并:
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)
  1. 创建调查设计对象:
survey_2 <- Union_Ingresos_Gastos %>% 
        as_survey_design(ids=UPM,strata=ESTRATO,weigths=FACTOR_EXPANSION,nest=TRUE)
  1. 分组汇总人口估计:
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之外,导致总权重减少。

  • 解决:
    1. 检查合并键的NA情况:colSums(is.na(Ingresos_Filtrado[, c("TRIMESTRE", "REPLICA", "UPM", "FACTOR_EXPANSION", "VIVIENDA", "HOGAR", "ORDEN_REGION", "QUINTIL")]))
    2. 若有NA,根据数据说明处理缺失值,或调整合并键(比如移除不必要的键,如FACTOR_EXPANSION——个人权重不应作为家庭级支出数据的合并键)。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:12:00