R語言中的fivenum與quantile()函數(shù)算法詳解
fivenum()函數(shù):
返回五個數(shù)據(jù):最小值、下四分位數(shù)數(shù)、中位數(shù)、上四分位數(shù)、最大值
對于奇數(shù)個數(shù)字=5,fivenum()先排序,依次返回最小值、下四分位數(shù)、中位數(shù)、上四分位數(shù)、最大值
> fivenum(c(1,12,40,23,13)) [1] 1 12 13 23 40
對于奇數(shù)個數(shù)字>5,fivenum()先排序,我們可以求取最小值,最大值,中位數(shù)。在排序中,最小值與中位數(shù)中間,若為奇數(shù),取其中位數(shù)為下四分位數(shù),若為偶數(shù),取最中間兩個數(shù)的平均值為下四分位數(shù);在排序中,中位數(shù)與最大值中間,若為奇數(shù),取其中位數(shù)為上四分位數(shù),若為偶數(shù),取最中間兩個數(shù)的平均值為上四分位數(shù);
> 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
對于偶數(shù)個數(shù)字=4,我們可以先求取最小值,最大值。中位數(shù)由最中間相鄰的數(shù)取平均求出;下四分位數(shù)由最小值與其相鄰的數(shù)求出;上四分位數(shù)由最大值與其相鄰的數(shù)求出;
> fivenum(c(1,10,23,8)) [1] 1.0 4.5 9.0 16.5 23.0
對于偶數(shù)個數(shù)字>4,排序,在排序中,中位數(shù)為最中間兩個數(shù)的平均值,最小值與中位數(shù)前一個數(shù)中間,若為奇數(shù),取其中位數(shù)為下四分位數(shù),若為偶數(shù),取最中間兩個數(shù)的平均值為下四分位數(shù);在排序中,中位數(shù)后一個數(shù)與最大值中間,若為奇數(shù),取其中位數(shù)為上四分位數(shù),若為偶數(shù),取最中間兩個數(shù)的平均值為上四分位數(shù);
> 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()函數(shù)或者通過計算位置推出分位數(shù),即:
位置:y=p*(n-1)+1,n為數(shù)值個數(shù);
若y為整數(shù),則該位置的數(shù)即為所求分位數(shù)的值,若y為分?jǐn)?shù),將該位置前后的兩數(shù)算數(shù)平均即可。
quantile()函數(shù):
R語言中的quantile()是分位數(shù)函數(shù),其算法是加權(quán)平均,第N個分位數(shù)就表示數(shù)據(jù)集中有N%的數(shù)據(jù)小于它。
默認(rèn)情況下,quantile()會告訴你數(shù)據(jù)集0%,25%,50%,75%,100%位置處的數(shù)據(jù),具體算法為:
位置:y=p*(n-1)+1,然后根據(jù)位置進行加權(quán)平均。
以1-10為例,20%分位數(shù)為例,首先位數(shù)=1+(10-1)*20%=2.8,所以此分位數(shù)在第二和第三個數(shù)之間,更靠近第三個數(shù)(2<2.8<3),算法:2*0.2+3*0.8=2.8,權(quán)重即越靠近某值,其權(quán)重越大,靠近3,則權(quán)重為0.8,越遠(yuǎn)離某值,其權(quán)重越小,遠(yuǎn)離2,則權(quán)重為0.2,兩個權(quán)重和為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%分位數(shù):
y=0.25*(8-1)+1=2.75;s=3*0.25+5*0.75=4.5
75%分位數(shù):
y=0.75*(8-1)+1=6.25;s=11*0.75+13*0.25=11.5
補充:R語言 quantile()和fivenum()的差別在于——加權(quán)平均與算術(shù)平均
quantile()和fivenum()的本質(zhì)差別在于, quantile()函數(shù)的算法是采用加權(quán)平均, fivenum()是算術(shù)平均。這么說可能不易理解,其實很簡單的,下面舉個例子說明就容易理解了。
例如,一組數(shù)據(jù) x <- 11 : 18,則如下圖,第一位是11,第二位是12,,,第8位是18,
對于 quantile()算法——加權(quán)平均,
0%位是第1位( 1+(8-1)*0%=1 ),
值為11; 25%位是第2.75位(1+(8-1)*25%=2.75 ),
第2.75位介于第2位和第3位之間,距離哪位較近,哪位數(shù)據(jù)的權(quán)重較大,所以第3位數(shù)據(jù)的權(quán)重是0.75,第2位數(shù)據(jù)是
權(quán)重是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 ()算法——算術(shù)平均,
0%位是第1位( 1+(8-1)*0%=1 ),值為11;
25%位是第2.75位(1+(8-1)*25%=2.75 ),第2.75位介于第2位和第3位之間,用算術(shù)平均法,則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()的代碼
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)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
R語言-如何將科學(xué)計數(shù)法表示的數(shù)字轉(zhuǎn)化為文本
這篇文章主要介紹了R語言-如何將科學(xué)計數(shù)法表示的數(shù)字轉(zhuǎn)化為文本,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04R語言中矩陣matrix和數(shù)據(jù)框data.frame的使用詳解
這篇文章主要介紹了R語言中矩陣matrix和數(shù)據(jù)框data.frame的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語言中常見的幾種創(chuàng)建矩陣形式總結(jié)
這篇文章主要給大家介紹了關(guān)于R語言中常見的幾種創(chuàng)建矩陣形式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語言 實現(xiàn)list類型數(shù)據(jù)轉(zhuǎn)換
這篇文章主要介紹了R語言 實現(xiàn)list類型數(shù)據(jù)轉(zhuǎn)換,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03