服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - R语言 - R语言中的fivenum与quantile()函数算法详解

R语言中的fivenum与quantile()函数算法详解

2022-01-10 15:41tianzhanlan R语言

这篇文章主要介绍了R语言中的fivenum与quantile()函数算法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

fivenum()函数:

返回五个数据:最小值、下四分位数数、中位数、上四分位数、最大值

对于奇数个数字=5,fivenum()先排序,依次返回最小值、下四分位数、中位数、上四分位数、最大值

> fivenum(c(1,12,40,23,13))
[1]  1 12 13 23 40

对于奇数个数字>5,fivenum()先排序,我们可以求取最小值,最大值,中位数。在排序中,最小值与中位数中间,若为奇数,取其中位数为下四分位数,若为偶数,取最中间两个数的平均值为下四分位数;在排序中,中位数与最大值中间,若为奇数,取其中位数为上四分位数,若为偶数,取最中间两个数的平均值为上四分位数;

> fivenum(c(2,6,20,8,10,120,30,130,250))
[1]   2   8  20 120 250
> fivenum(c(2,6,20,13,8,10,120,30,130,140,250))
[1]   2   9  20 125 250

对于偶数个数字=4,我们可以先求取最小值,最大值。中位数由最中间相邻的数取平均求出;下四分位数由最小值与其相邻的数求出;上四分位数由最大值与其相邻的数求出;

> fivenum(c(1,10,23,8))
[1]  1.0  4.5  9.0 16.5 23.0

对于偶数个数字>4,排序,在排序中,中位数为最中间两个数的平均值,最小值与中位数前一个数中间,若为奇数,取其中位数为下四分位数,若为偶数,取最中间两个数的平均值为下四分位数;在排序中,中位数后一个数与最大值中间,若为奇数,取其中位数为上四分位数,若为偶数,取最中间两个数的平均值为上四分位数;

> fivenum(c(1,2,3,4,8,10,11,12,14,23))
[1]  1  3  9 12 23
> fivenum(c(1,2,3,8,10,11,14,23))
[1]  1.0  2.5  9.0 12.5 23.0

fivenum()函数或者通过计算位置推出分位数,即:

位置:y=p*(n-1)+1,n为数值个数;

若y为整数,则该位置的数即为所求分位数的值,若y为分数,将该位置前后的两数算数平均即可。

 

quantile()函数:

R语言中的quantile()是分位数函数,其算法是加权平均,第N个分位数就表示数据集中有N%的数据小于它。

默认情况下,quantile()会告诉你数据集0%,25%,50%,75%,100%位置处的数据,具体算法为:

位置:y=p*(n-1)+1,然后根据位置进行加权平均。

以1-10为例,20%分位数为例,首先位数=1+(10-1)*20%=2.8,所以此分位数在第二和第三个数之间,更靠近第三个数(2<2.8<3),算法:2*0.2+3*0.8=2.8,权重即越靠近某值,其权重越大,靠近3,则权重为0.8,越远离某值,其权重越小,远离2,则权重为0.2,两个权重和为1。

> quantile(c(1,3,5,7,9,11,13,15))
0%  25%  50%  75% 100% 
1.0  4.5  8.0 11.5 15.0 

25%分位数:

y=0.25*(8-1)+1=2.75;s=3*0.25+5*0.75=4.5

75%分位数:

y=0.75*(8-1)+1=6.25;s=11*0.75+13*0.25=11.5

补充:R语言 quantile()和fivenum()的差别在于――加权平均与算术平均

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

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

R语言中的fivenum与quantile()函数算法详解

对于 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;

R语言中的fivenum与quantile()函数算法详解

同理,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语言验证:

R语言中的fivenum与quantile()函数算法详解

quantile()的代码

x <- 1:100
n <- length(x)
probs = seq(0, 1, 0.25)
index <- 1 + (n - 1) * probs
lo <- floor(index)
hi <- ceiling(index)
x <- sort(x, partial = unique(c(lo, hi)))
qs <- x[lo]
i <- which(index > lo)
h <- (index - lo)[i]
qs[i] <- (1 - h) * qs[i] + h * x[hi[i]]
qs
quantile(x=1:100)

fivenum ()的代码

x <- 1:100
n <- length(x)
n4 <- floor((n + 3)/2)/2
d <- c(1, n4, (n + 1)/2, n + 1 - n4, n)
0.5 * (x[floor(d)] + x[ceiling(d)])
fivenum(x=1:100) 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://www.jianshu.com/p/87e74468856f

延伸 · 阅读

精彩推荐
  • R语言R语言创建矩阵的实现方法

    R语言创建矩阵的实现方法

    这篇文章主要介绍了R语言创建矩阵的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    hjk_caesar9462021-12-27
  • R语言R语言可视化存储矢量图实现方式

    R语言可视化存储矢量图实现方式

    这篇文章主要为大家介绍了R语言存储矢量图的实现方式过程,有需要的朋友可以借鉴参考下,希望能够有所你帮助,祝大家多多进步,早日升职加薪...

    Kanny广小隶9392022-01-20
  • R语言R语言-使用ifelse进行数据分组

    R语言-使用ifelse进行数据分组

    这篇文章主要介绍了R语言-使用ifelse进行数据分组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    小力丸12042022-01-10
  • R语言聊聊R语言中Legend 函数的参数用法

    聊聊R语言中Legend 函数的参数用法

    这篇文章主要介绍了聊聊R语言中Legend 函数的参数用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Gavin姓陈6352021-12-28
  • R语言R语言中c()函数与paste()函数的区别说明

    R语言中c()函数与paste()函数的区别说明

    这篇文章主要介绍了R语言中c()函数与paste()函数的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yiyu_j11152022-01-12
  • R语言R语言编程学习绘制动态图实现示例

    R语言编程学习绘制动态图实现示例

    这篇文章主要介绍了R语言编程学习绘制动态图实现示例,有需要的的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    微小冷7652022-01-18
  • R语言R studio 批量注释的快捷方式

    R studio 批量注释的快捷方式

    这篇文章主要介绍了R studio 批量注释的快捷方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    JasonKQLin13342022-01-04
  • R语言R语言绘制散点图实例分析

    R语言绘制散点图实例分析

    在本篇文章里小编给大家整理的是一篇关于R语言绘制散点图实例分析内容,有需要的朋友们可以学习下。...

    w3cschool6942022-01-06