R weighted-mean加权函数

R-weighted.mean()

转载 2015-10-07 16:01:17

加权平均

在一组数据里,一个数据出现的次数称为权​。


A权重已知

例①​ ②③④⑤⑥

学校算期末成绩,期中考试占30%,期末考试占50%,作业占20%,假如某人期中考试得了84,期末92,作业分91,如果是算数平均,那么就是(84+92+91)/3=89;

加权后的,那么加权处理后就是(84*30%+92*50%+91*20%)=89.4

B权重未知

​例

​一班50人,平均80,二班60人,平均82,算数平均是(80+82)/2=81,加权后是(50*80+60*82)/(50+60)=81.09.


你觉得专家的分量比较大,老师其次,学生最低,就某观点,满分10分的情况下,专家打8分,老师打7分,学生打6分,但你认为专家权重和老师及学生权重应为0.5:0.3:0.2,那么加权后就是8*0.5+7*0.3+6*0.2=7.3,而算数平均的话就是(8+6+7)/3=7。

例④

​你的小测成绩是80分,期末考成绩是90分,老师要计算总的平均成绩,就按照小测40%、期末成绩60%的比例来算,所以你的平均成绩是:

80×40%+90×60%=86


学校食堂吃饭,吃三碗的有 χ 人,吃两碗的有 y 人,吃一碗的 z人。平均每人吃多少?​

(3*x + 2*y + 1*z)÷(x + y +z)​​

这里x、y、z分别就是权数值,“加权”就是考虑到不同变量在总体中的比例份额。[2] 

加权平均数

=(x1*f1 + x2*f2+ ... xk*fk)/n,其中f1 + f2 + ... + fk=n.

f1,f2,…,fk叫做权。通过数和权的乘积来计算 。

需要注意的是:算术平均实际上是一种特殊的加权平均,即权重相同的加权平均。比如f1=f2=f3=...fn。那么加权平均数=(x1f1+ x2f2+ ... xkfk)/n,实际上确切的说是一种算术平均。

====================================================​

For example, I have 4 elements of which 1 element is ofsize (or: length, width, etc.) 10 and 3 elements are of size2. 

> z = data.frame(count=c(1,3), size=c(10,2))
> z
  count size
1     1   10


2     3    2



> weighted.mean(z$size, z$count)
[1] 4

​②

Seems like you already know how to calculate this, just need a nudge in the right direction to implement it. Since R is vectorized, this is pretty simple:
with(z, sum(count*size)/sum(count))




The with bit just saves on typing and is equivalent to sum(z$count*z$size)/sum(z$count)

Or use the built in function weighted.mean() as you also pointed out. Using your own function can prove faster, though will not do the same amount of error checking that the builtin function does.

builtin <- function() with(z, weighted.mean(count, size))
rollyourown <- function() with(z, sum(count*size)/sum(count))

require(rbenchmark)  
  benchmark(builtin(), rollyourown(),
            replications = 1000000,
            columns = c("test", "elapsed", "relative"),
            order = "relative")
#-----
           test elapsed relative
2 rollyourown()   13.26 1.000000
1     builtin()   22.84 1.722474

​http://stackoverflow.com/questions/10989032/how-to-compute-weighted-mean-in-r/10989033

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值