我有以下数据:
d = c(58.33333, 58.33333, 56.66667, 45.00000, 60.00000, 70.00000, 61.66667, 51.66667, 58.33333, 71.66667, 50.00000, 63.33333)这些数据的统计摘要如下:
Min. 1st Qu. Median Mean 3rd Qu. Max.
45.00 55.42 58.33 58.75 62.08 71.67当我使用函数boxplot(d, range=1.5)对数据进行框式绘图时,我会得到以下内容:

根据我的计算,较低的晶须应该只延伸到55.42 - 1.5*(62.08-55.42) = 45.43。尽管如此,最小数据点(45)应该显示为一个离群点,但是图实际上将晶须向下延伸到这个最小值。这一切为什么要发生?是否有我不知道的四舍五入的程序,包括45进范围?比如与这两点有多近有关的东西(45.43和45)?
发布于 2020-09-29 01:41:23
这里的问题是,boxplot使用与summary或quantile不同的方法计算四分位数。来自?boxplot.stats
两个‘铰链’是第一个和第三个四分位数的版本,即接近分位数(x,c(1,3)/4)。铰链等于奇数n的四分位数(其中n <-长度(X)),偶数n的铰链等于四分位数。
示例:
boxplot.stats(d)$stats
[1] 45.00000 54.16667 58.33333 62.50000 71.66667
fivenum(d) # the same
[1] 45.00000 54.16667 58.33333 62.50000 71.66667
quantile(d) # different
0% 25% 50% 75% 100%
45.00000 55.41667 58.33333 62.08333 71.66667 为quantile指定方法(类型)以获得相同的结果:
quantile(d, type = 2)
0% 25% 50% 75% 100%
45.00000 54.16667 58.33333 62.50000 71.66667发布于 2022-10-01 08:54:33
您可以获得一个更简单的盒形图,其中包括使用ggpubr的离群点,并检查该值是否确实是rstatix的异常值。在这里,我加载了这两个库。
#### Load Libraries ####
library(ggpubr)
library(rstatix)然后,我用您的数据运行了一个简单的单命令盒图,其中的值显然是存在的:
#### Run Simple Box ####
ggboxplot(d) # runs boxplot

然后,我检查了它是否确实是一个离群点,然后进行了并行比较:
#### Check Outliers ####
is_outlier(d) # checks if values are outliers
d %>%
as.data.frame() %>%
mutate(Outlier = is_outlier(.)) # side-by-side look第二个命令如下所示,现在您可以看到异常值所在的位置:
. Outlier
1 58.33333 FALSE
2 58.33333 FALSE
3 56.66667 FALSE
4 45.00000 TRUE
5 60.00000 FALSE
6 70.00000 FALSE
7 61.66667 FALSE
8 51.66667 FALSE
9 58.33333 FALSE
10 71.66667 FALSE
11 50.00000 FALSE
12 63.33333 FALSE当然,您也可以稍微美化一些东西,而且该框甚至可以与ggplot2函数兼容,而无需加载它们:
#### Run Prettier Boxplot ####
d %>%
ggboxplot(color = "darkred",
title = "Boxplot With Single Outlier",
xlab = "Variable",
ylab = "Value",
size = 1.5)+
theme_bw()

https://stackoverflow.com/questions/64111598
复制相似问题