R中箱形图中的下四分位数和上四分位数

Mat*_*ath 7 plot r boxplot

我有

X=c(20 ,18, 34, 45, 30, 51, 63, 52, 29, 36, 27, 24)
Run Code Online (Sandbox Code Playgroud)

随着boxplot,我试图绘制quantile(X,0.25),quantile(X,0.75) 但这不是真正的R中的boxplot中的上下四分位数

boxplot(X)
abline(h=quantile(X,0.25),col="red",lty=2)
abline(h=quantile(X,0.75),col="red",lty=2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 你知道为什么吗?

lmo*_*lmo 11

该框的值称为铰链,可能与四分位数(按计算方式quantile(x, c(0.25, .075)))一致,但计算方式不同.

来自?boxplot.stats:

两个"铰链"是第一和第三四分位数的版本,即接近分位数(x,c(1,3)/ 4).铰链等于奇数n的四分位数(其中n < - 长度(x))并且对于偶数n而言是不同的.尽管四分位数仅对n %% 4 == 1(n = 1 mod 4)的观测值相等,但对于n %% 4 == 2(n = 2 mod 4),铰链也是如此,并且在两个中间否则观察.

要查看值与奇数个观察值一致,请尝试以下代码:

set.seed(1234)
x <- rnorm(9)

boxplot(x)
abline(h=quantile(x, c(0.25, 0.75)), col="red")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


dww*_*dww 8

差异源于分位数定义的模糊性.没有一种方法是严格正确的或不正确的 - 当它们与特定数据点不完全一致并且必须被内插时,在情况(例如偶数个数据点)中有简单的不同方法来估计分位数.有些令人不安,boxplotquantile(和提供汇总统计其他功能)使用不同的默认方法来计算分位数,虽然这些默认值可以是使用过骑type =在参数quantile

通过查看在R中生成分位数统计的各种方法,我们可以更清楚地看到这些差异.

双方boxplotfivenum给出相同的值:

boxplot.stats(X)$stats
# [1] 18.0 25.5 32.0 48.0 63.0
fivenum(X)
# [1] 18.0 25.5 32.0 48.0 63.0
Run Code Online (Sandbox Code Playgroud)

boxplot和中fivenum,下(上)四分位数相当于数据下半部分(上半部分)的中位数(包括完整数据的中位数):

c(median(X[ X <= median(X) ]), median(X[ X >= median(X) ]))
# [1] 25.5  48.0
Run Code Online (Sandbox Code Playgroud)

但是,quartilesummary做不同的事情:

summary(X)
#  Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
# 18.00   26.25   32.00   35.75   46.50   63.00

quantile(X, c(0.25,0.5,0.75))
#   25%   50%   75% 
# 26.25 32.00 46.50
Run Code Online (Sandbox Code Playgroud)

这一点,从结果之间的差异boxplotfivenum 对功能的数据之间如何插值铰链.quartile尝试通过估计累积分布函数的形状进行插值.根据?quantile:

分位数基于来自x中提供的元素的一个或两个顺序统计量以probs中的概率返回基础分布分位数的估计.采用Hyndman和Fan(1996)中讨论的九种分位数算法之一,按类型选择.

quantile用于估计数据的分布函数的九种不同方法的全部细节可以在这里找到?quantile,并且太长而不能完全再现.需要注意的重要一点是,9种方法取自Hyndman和Fan(1996),他们推荐使用类型8.由于quantile与S兼容的历史原因,使用的默认方法是类型7我们可以看到提供的四分位数的估计值通过分位数的不同方法使用:

quantile_methods = data.frame(q25 = sapply(1:9, function(method) quantile(X, 0.25, type = method)),
           q50 = sapply(1:9, function(method) quantile(X, 0.50, type = method)),
           q75 = sapply(1:9, function(method) quantile(X, 0.75, type = method)))
#       q25 q50    q75
# 1 24.0000  30 45.000
# 2 25.5000  32 48.000
# 3 24.0000  30 45.000
# 4 24.0000  30 45.000
# 5 25.5000  32 48.000
# 6 24.7500  32 49.500
# 7 26.2500  32 46.500
# 8 25.2500  32 48.500
# 9 25.3125  32 48.375
Run Code Online (Sandbox Code Playgroud)

其中type = 5提供与四分位数相同的估计值boxplot.但是,当存在奇数个数据时,它将type=7与boxplot统计数据一致.

我们可以通过自动选择类型为5或7来显示此工作,具体取决于是否存在奇数或偶数数据.下图中的Boxplot显示具有1到30个值的数据集的分位数,boxplotquantile为奇数和偶数N提供相同的值:

layout(matrix(1:30,5,6, byrow = T), respect = T)
par(mar=c(0.2,0.2,0.2,0.2), bty="n", yaxt="n", xaxt="n")

for (N in 1:30){
  X = sample(100, N)
  boxplot(X)
  abline(h=quantile(X, c(0.25, 0.5, 0.75), type=c(5,7)[(N %% 2) + 1]), col="red", lty=2)
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Hyndman,RJ和Fan,Y.(1996)统计包中的分位数样本,American Statistician 50,361-365