R语言中weighted.mean函数计算结果异常的原因及正确用法
问题解析:weighted.mean的计算逻辑与正确用法
嘿,我来帮你搞懂为什么这两个结果不一样,以及怎么正确使用weighted.mean函数~
首先,我们先复现你的代码,确认结果差异:
q1<-c(9,8,10,9,3,2,1,2,4,5) q2<-c(9,7,8,6,5,4,8,7,8,9) q3<-c(0,0,0,5,9,5,9,5,0,5) # 计算各向量的均值 mean_vals <- c(mean(q1), mean(q2), mean(q3)) # 计算MMean和权重向量corvector MMean <- colMeans(rbind(q1,q2,q3)) corvector <- c(cor(q1,MMean), cor(q2,MMean), cor(q3,MMean)) # 两种计算方式的结果 weighted.mean(mean_vals, corvector) # 输出 5.709562 sum(mean_vals * corvector) # 输出 6.248393
核心原因:weighted.mean的计算逻辑
你可能误以为weighted.mean只是计算加权和,但实际上它的公式是:
加权算术平均值 = (各元素×对应权重的总和) / (所有权重的总和)
换句话说,weighted.mean(x, w)等价于sum(x * w) / sum(w),而不是单纯的sum(x * w)。我们可以手动验证这一点:
# 手动模拟weighted.mean的计算过程 sum(mean_vals * corvector) / sum(corvector) # 输出结果:5.709562,和weighted.mean完全一致
你可以看看你的权重向量corvector的总和:
sum(corvector) # 输出:1.094387
因为权重总和不是1,所以除以这个值之后,结果就和直接加权和产生了差异。如果你的权重是归一化(总和为1)的,那两种方法的结果会完全相同。
正确使用weighted.mean的场景
- 当你需要计算加权算术平均值时(权重代表各元素的相对重要性,最终结果要体现“平均”的含义),使用
weighted.mean(x, w),它会自动帮你完成「加权和 ÷ 权重总和」的计算。 - 如果你只需要单纯的加权和(不需要除以权重总和),直接使用
sum(x * w)即可。
内容的提问来源于stack exchange,提问作者Ameneh Abyar
相关产品推荐
相关产品推荐

