R语言第三四分位数计算结果与手动值不符的原因及正确值咨询
第三四分位数计算差异解析
问题场景
给定以下数据:
tj<-c(0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 6 , 6 , 6 , 6 , 7 , 8 , 8 , 9 , 16 , 20 )
手动计算第三四分位数得到4.5(取第42和43个元素的平均值),但用R的summary()和默认quantile()函数计算得到4.25:
summary(tj) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 0.000 2.000 3.036 4.250 20.000 res<-quantile(tj, probs = c(0,0.25,0.5,0.75,1)) res 0% 25% 50% 75% 100% 0.00 0.00 2.00 4.25 20.00
差异原因:分位数计算规则不同
R语言的quantile()函数默认使用type=7的计算规则(Tukey提出的分位数方法),具体逻辑为:
- 对于分位数概率
p=0.75,数据总长度n=56,计算位置索引:(n-1)*p = 55*0.75 = 41.25 - 取该位置的整数部分
41,对应第41+1=42个元素(值为4),小数部分0.25 - 最终结果为:
第42个元素 + 小数部分*(第43个元素-第42个元素),即4 + 0.25*(5-4) = 4.25
而你手动计算采用的是另一种常见规则(对应R中的type=2):
- 计算位置:
n*p = 56*0.75 = 42,刚好是整数 - 取第42和第43个元素的平均值:
(4+5)/2 = 4.5
关于“正确”取值的说明
四分位数并没有统一的标准定义,不同统计场景会采用不同的计算规则。R的quantile()函数支持9种不同的计算类型(type=1到type=9),你可以通过指定type参数切换:
# 得到和手动计算一致的结果 quantile(tj, 0.75, type=2) 75% 4.5
选择哪种规则取决于你的分析需求:
- 若适配Tukey箱线图逻辑,默认type=7更合适
- 若需要取相邻元素的平均,type=2或type=5更符合手动计算习惯
内容的提问来源于stack exchange,提问作者ArTu
相关产品推荐
相关产品推荐

