R中产生的分位数与百分位数之间的差异

时间:2018-11-27 02:43:52

标签: r dplyr quantile

请原谅我的数学,但是为什么这两个代码的结果不同?预计2015年第63和82累计百分比行中的费用与第二个年度产生的费用相同。 X63的第一个为0.591,X82的第一个为0.858,cumsum_pct中的第二个代码分别显示0.792和0.966。谢谢

set.seed(1)
library('dplyr')
Claims6 <- data.frame(year = factor(rep(c(2015, 2016), each = 10)),Expense = runif(20))

Claims6 %>% 
  group_by(year) %>% 
  do(data.frame(t(quantile(.$Expense, probs = c(0.10, 0.30, 0.63, 0.82)))))

# A tibble: 2 x 5
# Groups:   year [2]
# year    X10.  X30.  X63.  X82.
# <fct>  <dbl> <dbl> <dbl> <dbl>
# 1 2015  0.0488 0.439 0.591 0.858
# 2 2016  0.101  0.262 0.592 0.805

Claims6 %>% group_by(year) %>% 
  arrange(year,Expense) %>%
  mutate(pct = round(Expense / sum(Expense),2),
         cumsum_pct = round(cumsum(Expense) / sum(Expense),2))

# A tibble: 20 x 4
# Groups:   year [2]
# year  Expense   pct cumsum_pct
# <fct>   <dbl> <dbl>      <dbl>
#   1 2015   0.0332  0.01       0.01
# 2 2015   0.0505  0.01       0.02
# 3 2015   0.384   0.07       0.09
# 4 2015   0.463   0.09       0.18
# 5 2015   0.467   0.09       0.26
# 6 2015   0.538   0.1        0.37
# 7 2015   0.617   0.12       0.48
# 8 2015   0.792   0.15       0.63
# 9 2015   0.966   0.18       0.82
# 10 2015   0.972   0.18       1   
# 11 2016   0.0622  0.01       0.01
# 12 2016   0.106   0.02       0.03
# 13 2016   0.178   0.04       0.07
# 14 2016   0.298   0.06       0.13
# 15 2016   0.445   0.09       0.23
# 16 2016   0.591   0.12       0.35
# 17 2016   0.592   0.12       0.47
# 18 2016   0.765   0.16       0.63
# 19 2016   0.872   0.18       0.81
# 20 2016   0.904   0.19       1   

1 个答案:

答案 0 :(得分:1)

这是两个相关的但独立的摘要统计信息。第一个与排序有关,第二个与累积总和有关。它们将覆盖相同的值范围,但元素的权重不同。

在下面的简单示例中,使用ssh -T username@host <<'EOF' relative="$HOME/Documents" command=$(find "$relative" -name GitHub) command2=$(echo "$relative") echo "HERE: $command" echo "HERE: $command2" EOF 的第一个计算与采样有关,表明50%的采样是2,介于第二和第三值之间。即使第一个和/或最后一个值更加极端,您也将获得相同的中值-quantile只关心顺序。

第二个是值的累积分布,显示50%的累积总和为3。

quantile

类似地,您提供的两个计算之间的数字通常不会匹配,因为它们做的是不同的事情。 nums = c(0, 1, 3, 4) quantile(nums) # 0% 25% 50% 75% 100% # 0.00 0.75 2.00 3.25 4.00 data.frame(nums = nums) %>% mutate(pct = nums / sum(nums), cumsum_pct = cumsum(pct)) # nums pct cumsum_pct # 1 0 0.000 0.000 # 2 1 0.125 0.125 # 3 3 0.375 0.500 # 4 4 0.500 1.000 会在有序元素列表的某个特定部分告诉值,而另一个会在累积总和达到总数的给定部分时告诉该值。