使用ecdf()和plyr :: percent_rank()的不同百分位数

时间:2017-06-20 15:25:24

标签: r data.table dplyr ecdf

我一直试图在相当多的观察中计算百分位数。我遇到了两种计算百分位数的方法。由于我正在处理面板数据集,因此我想对每个时间段的百分位数进行分组。为此,我正在使用此answer和此问题Use dplyr::percent_rank() to compute percentile ranks within group

现在的问题是,这两个命令之间的百分位数显然不同,我想知道两者是否“正确”。 为了证明这一点:

library(data.table)
library(plyr)
years = c(2006, 2006, 2006, 2006, 2001, 2001, 2001, 2001, 2001)
scores = c(13, 65, 23, 34, 78, 56, 89, 98, 100)

dt <- data.table(years
                 , scores)

ddply(dt, .(years), transform, percentile = ecdf(scores)(scores)) 
ddply(dt, .(years), transform, percentile = round(percent_rank(scores), 4)) 
dt[, .( scores
      , ecdf.percentile = ecdf(scores)(scores)
      , p.rank.percentile = round(percent_rank(scores), 4) )
      , by = list(years)][order(years),]

可以看出,尽管它们非常相似但它们是不同的:

   years scores ecdf.percentile p.rank.percentile
1:  2001     78            0.40            0.2500
2:  2001     56            0.20            0.0000
3:  2001     89            0.60            0.5000
4:  2001     98            0.80            0.7500
5:  2001    100            1.00            1.0000
6:  2006     13            0.25            0.0000
7:  2006     65            1.00            1.0000
8:  2006     23            0.50            0.3333
9:  2006     34            0.75            0.6667

0 个答案:

没有答案