使用summarytools的stby函数分组计算加权均值结果不一致求助
问题原因分析
你遇到的结果不一致问题,核心原因是**stby传递权重参数的方式错误**:
当你用with(mydf, stby(score, gender, descr, weights = weight))时,weights = weight传入的是整个数据集的完整权重列,而非对应分组的权重子集。stby只会拆分score和gender变量,但不会同步拆分weight,导致descr计算分组统计时,误用了全量权重数据,自然和先过滤再计算的结果不符。
从输出也能佐证这一点:直接分组时gender=1的N.Valid(加权有效样本量)是1715494.12,远大于先过滤后的1509584.07,说明前者把不属于gender=1的权重也纳入了计算。
修正方法
不要用with包裹,直接把整个数据框传入stby,通过匿名函数确保每个分组只使用自身对应的权重:
# 标准写法 stby(mydf, mydf$gender, function(x) descr(x$score, weights = x$weight)) # 管道风格写法 mydf %>% stby(.$gender, function(x) descr(x$score, weights = x$weight))
这里的匿名函数会接收每个分组的子集x,x$weight就是当前分组对应的权重,计算逻辑和先过滤再统计完全一致,能得到正确的加权均值。
内容的提问来源于stack exchange,提问作者Caragh
相关产品推荐
相关产品推荐

