R语言 quantile()和fivenum()的差别在于——加权平均与算术平均(转载)

转自:http://blog.sina.com.cn/s/blog_a184ae810102xqwe.html

quantile()和fivenum()的本质差别在于, quantile()函数的算法是采用加权平均, fivenum()是算术平均。这么说可能不易理解,其实很简单的,下面举个例子说明就容易理解了。

例如,一组数据 x <- 11 : 18,则如下图,第一位是11,第二位是12,,,第8位是18,


对于 quantile()算法——加权平均,
0%位第1位 1+(8-1)*0%=1 ),值为11
25%位是第2.75位(1+(8-1)*25%=2.75 ),第2.75位介于第2位和第3位之间,距离哪位较近,哪位数据的权重较大,所以第3位数据的权重是0.75,第2位数据是权重是0.25,则25%位值=13*0.75+12*0.25=12.75


同理,50%位第4.5位 1+(8-1)*50%=4.5 ),值=14*0.5+15*0.5=14.5
75%位第6.25位 1+(8-1)*75%=6.25 ),值=16*0.75+17*0.25=16.25
100%位第8位 1+(8-1)*100%=8 ),值为18

对于fivenum ()算法——算术平均,
0%位第1位 1+(8-1)*0%=1 ),值为11
25%位是第2.75位(1+(8-1)*25%=2.75 ),第2.75位介于第2位和第3位之间,用算术平均法,则25%位值=(13+12)/2=12.5
同理,50%位第4.5位 1+(8-1)*50%=4.5 ),值=(14+15)/2=14.5
75%位第6.25位 1+(8-1)*75%=6.25 ),值=(16+17)/2=16.5
100%位第8位 1+(8-1)*100%=8 ),值为18

用r语言验证:


quantile()的代码
  1. x <- 1:100
  2. n <- length(x)
  3. probs = seq(0, 1, 0.25)
  4. index <- 1 + (n - 1) * probs
  5. lo <- floor(index)
  6. hi <- ceiling(index)
  7. x <- sort(x, partial = unique(c(lo, hi)))
  8. qs <- x[lo]
  9. i <- which(index > lo)
  10. h <- (index - lo)[i]
  11. qs[i] <- (1 - h) * qs[i] + h * x[hi[i]]
  12. qs
  13. quantile(x=1:100)

fivenum ()的代码
  1. x <- 1:100
  2. n <- length(x)
  3. n4 <- floor((n + 3)/2)/2
  4. d <- c(1, n4, (n + 1)/2, n + 1 - n4, n)
  5. 0.5 * (x[floor(d)] + x[ceiling(d)])
  6. fivenum(x=1:100)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值