为HRS的INPOVR变量创建五分位数遇报错,求解决方法
为HRS收入贫困比变量(INPOVR)创建五分位数分组的解决方案
问题原因分析
报错Insufficient data values to produce 5 bins的核心原因:
- 变量
INPOVR存在大量重复值,无法均匀划分出5个样本量大致相等的分组 - 样本量过小,或存在大量缺失值未处理
第一步:排查数据基础情况
先执行以下代码确认数据状态:
# 统计缺失值数量 sum(is.na(data0_dsr$INPOVR)) # 查看唯一值数量 length(unique(data0_dsr$INPOVR)) # 输出变量的描述性统计 summary(data0_dsr$INPOVR) # 绘制直方图观察分布 hist(data0_dsr$INPOVR, breaks = 20)
第二步:生成五分位数分组的正确方法
方法1:优先使用cut_number(需数据满足分组条件)
先过滤缺失值,再执行分组:
data0_dsr <- data0_dsr %>% filter(!is.na(INPOVR)) %>% mutate(inc_pov_ratio_5cat = cut_number(INPOVR, n = 5, labels = paste0("Q", 1:5)))
方法2:手动计算分位数分组(解决重复值导致的报错)
如果cut_number仍报错,说明重复值过多,手动计算分位数临界值后分组:
# 计算五分位数临界值(忽略缺失值) pctls <- quantile(data0_dsr$INPOVR, probs = seq(0, 1, 0.2), na.rm = TRUE) # 用cut函数分组,include.lowest确保最小值被包含进第一组 data0_dsr <- data0_dsr %>% mutate(inc_pov_ratio_5cat = cut(INPOVR, breaks = pctls, labels = paste0("Q", 1:5), include.lowest = TRUE))
关于cut_width的说明
cut_width是按固定数值宽度分箱,并非按样本数量划分五分位数(每组样本数大致相等),因此不适合用来生成五分位数分组。如果仅需固定宽度分箱,可按以下方式计算宽度,但这与五分位数逻辑无关:
# 计算固定宽度(变量范围除以5) range_val <- range(data0_dsr$INPOVR, na.rm = TRUE) width_val <- diff(range_val) / 5 # 生成固定宽度分组 data0_dsr <- data0_dsr %>% mutate(inc_pov_ratio_width = cut_width(INPOVR, width = width_val))
内容的提问来源于stack exchange,提问作者NICOLA CHURCHILL
相关产品推荐
相关产品推荐

