我一直在尝试计算大量观察的百分位数。我遇到了两种不同的计算百分位数的方法。由于我正在处理面板数据集,因此我想对每个时间段的百分位数进行分组。为此,我使用这个Use dplyr::percent_rank() 来计算组内的百分位等级和这个问题Percentile for Each Observation w/r/t Grouping Variable。
现在的问题是,这两个命令之间的百分位数显然不同,我想知道两者是否“正确”。为了证明这一点:
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