如何在R中使用survey包应用调查权重计算加权频数与比例?
使用survey包计算加权频数与比例指导
前提准备
确保已加载survey包:
library(survey)
你已创建好调查设计对象:
srvy_des_1015 <- svydesign(ids = ~PSU, data = table_1015, weights = ~weight, strata = ~stratum, nest = TRUE)
1. 计算加权频数(weighted_count)
方法1:用svytable生成加权交叉表
直接生成年份×年龄的加权频数表,可转为数据框方便后续处理:
# 生成加权交叉表 weighted_table <- svytable(~year + age, srvy_des_1015) # 转为数据框并调整列名 weighted_count_df <- as.data.frame(weighted_table) colnames(weighted_count_df) <- c("year", "age", "weighted_count")
方法2:用svyby分组计算加权总数
适合单独提取每组加权频数的场景:
# 按year和age分组,计算每组加权总人数 weighted_counts <- svyby(~1, ~year + age, srvy_des_1015, svytotal, na.rm = TRUE) # 调整列名(可选) colnames(weighted_counts)[ncol(weighted_counts)-1] <- "weighted_count"
2. 计算加权比例(weighted_prop)
方法1:计算每组占总体的加权比例
用svymean直接分组计算占比:
# 按year和age分组,计算每组占总体的加权比例 weighted_props_overall <- svyby(~1, ~year + age, srvy_des_1015, svymean, na.rm = TRUE) # 调整列名(可选) colnames(weighted_props_overall)[ncol(weighted_props_overall)-1] <- "weighted_prop_overall"
方法2:计算组内比例(如同年份内各年龄组占比)
基于加权交叉表,用svyprop.table按指定维度计算:
# 按年份(行维度,margin=1)计算各年龄组占比 weighted_props_by_year <- svyprop.table(weighted_table, margin = 1) # 转为数据框并调整列名 weighted_prop_df <- as.data.frame(weighted_props_by_year) colnames(weighted_prop_df) <- c("year", "age", "weighted_prop_by_year")
3. 二分类问题(如q1、q2)的加权统计
以q1(1=是,0=否,NA=缺失)为例,计算分组的“是”的加权频数与比例:
加权频数(“是”的人数)
# 按year和age分组,计算q1=1的加权总数 q1_weighted_counts <- svyby(~I(q1 == 1), ~year + age, srvy_des_1015, svytotal, na.rm = TRUE) colnames(q1_weighted_counts)[ncol(q1_weighted_counts)-1] <- "q1_yes_weighted_count"
加权比例(“是”的占比)
# 按year和age分组,计算q1=1的加权比例 q1_weighted_props <- svyby(~I(q1 == 1), ~year + age, srvy_des_1015, svymean, na.rm = TRUE) colnames(q1_weighted_props)[ncol(q1_weighted_props)-1] <- "q1_yes_weighted_prop"
注意事项
- 若
age为连续变量,需先将其转为分类变量(如用cut()分年龄段),否则分组统计无意义; - 所有统计命令中添加
na.rm=TRUE可自动忽略缺失值; - 可通过
summary(srvy_des_1015)检查调查设计对象是否正确生成。
内容的提问来源于stack exchange,提问作者Tati16
相关产品推荐
相关产品推荐

