R 在ggplot2中,箱线图线的末端代表什么?
我找不到箱线图线条端点代表什么的描述 例如,以下是直线终点上方和下方的点值。 (我知道盒子的顶部和底部是第25个和第75个百分位,中心线是第50个)。我假设,由于线条上方和下方存在点,它们并不代表最大/最小值。箱线图末尾的“点”代表异常值。有许多不同的规则用于确定点是否为异常值,但R和ggplot使用的方法是“1.5规则”。如果数据点是:R 在ggplot2中,箱线图线的末端代表什么?,r,ggplot2,boxplot,R,Ggplot2,Boxplot,我找不到箱线图线条端点代表什么的描述 例如,以下是直线终点上方和下方的点值。 (我知道盒子的顶部和底部是第25个和第75个百分位,中心线是第50个)。我假设,由于线条上方和下方存在点,它们并不代表最大/最小值。箱线图末尾的“点”代表异常值。有许多不同的规则用于确定点是否为异常值,但R和ggplot使用的方法是“1.5规则”。如果数据点是: 小于Q1-1.5*IQR 大于Q3+1.5*IQR 然后该点被归类为“异常值”。胡须的定义如下: 上须=最小值(最大值(x),Q_3+1.5*IQR)
- 小于Q1-1.5*IQR
- 大于Q3+1.5*IQR
- 有关其他异常值规则,请参见页面
- 实际上,计算分位数的方法有很多种。关于九种不同方法的描述,请看“分位数”
> set.seed(1)
> x = rlnorm(20, 1/2)#skewed data
> par(mfrow=c(1,3))
> boxplot(x, range=1.7, main="range=1.7")
> boxplot(x, range=1.5, main="range=1.5")#default
> boxplot(x, range=0, main="range=0")#The same as range="Very big number"
这给出了以下曲线图:
当我们将范围从1.7减小到1.5时,我们减小了晶须的长度。然而,
range=0
是一种特殊情况-它相当于“range=infinity”我认为ggplot使用标准默认值,与boxplot相同:“胡须延伸到最极端的数据点,距离长方体的长度不超过[1.5]倍。”
请参阅:视频提供了(Tukey)方框图和胡须图的直观逐步说明
在4m 23s,我解释了胡须末端的含义及其与1.5*IQR的关系
尽管视频中显示的图表是使用D3.js而不是R绘制的,但其解释与提到的箱线图的R实现一致。正如@TemplateRex在评论中强调的那样,ggplot没有在上/下四分位加/减1.5倍IQR处绘制胡须。它实际上在最大值(x[x
library("mosaic") # For favstats()
df <- c(54, 41, 55, 66, 71, 50, 65, 54, 72, 46, 36, 64, 49, 64, 73,
52, 53, 66, 49, 64, 44, 56, 49, 54, 61, 55, 52, 64, 60, 54, 59,
67, 58, 51, 63, 55, 67, 68, 54, 53, 58, 26, 53, 56, 61, 51, 51,
50, 51, 68, 60, 67, 66, 51, 60, 52, 79, 62, 55, 74, 62, 59, 35,
67, 58, 74, 48, 53, 40, 62, 67, 57, 68, 56, 75, 55, 41, 50, 73,
57, 62, 61, 48, 60, 64, 53, 53, 66, 58, 51, 68, 69, 69, 58, 54,
57, 65, 78, 70, 52, 59, 52, 65, 70, 53, 57, 72, 47, 50, 70, 41,
64, 59, 58, 65, 57, 60, 70, 46, 40, 76, 60, 64, 51, 38, 67, 57,
64, 51)
df <- as.data.frame(df)
Q1 <- favstats(df)$Q1
Q3 <- favstats(df)$Q3
IQR <- Q3 - Q1
lowerlim <- Q1 - 1.5*IQR
upperlim <- Q3 + 1.5* IQR
boxplot_Tukey_lower <- min(df[df > lowerlim])
boxplot_Tukey_upper <- max(df[df < upperlim])
ggplot(df, aes(x = "", y = df)) +
stat_boxplot(geom ='errorbar', width = 0.5) +
geom_boxplot() +
geom_hline(yintercept = lowerlim, linetype = "dashed") +
geom_hline(yintercept = upperlim, linetype = "dashed")
用于favstats()的库(“马赛克”)
df有关
?boxplot
或?boxplot.stats
的信息,请参见帮助页面。ggplot使用标准的R函数进行这些计算。在ggplot2中,上晶须的计算值为max(x[x?boxplot.stats
,标准是+/-1.58*IQR/sqrt(n)
而非[1.5]倍于框的长度
。我有什么误解吗?@Henrik:你把胡子和刻痕搞混了。麦吉尔的论文可读性很强:与麦吉尔论文的链接不再有效。我找不到新的(免费)链接。该论文可以从下载,但费用为14美元(或者你需要有机构访问)。感谢你的贡献。通常,将准确的代码添加到绘图中会很有帮助。(不需要主题调用和实验室标题,只需使用ggplot()+geom_boxplot()。理想情况下,一个完全可复制的示例会很好,例如在内置数据集上。也许可以尝试“reprex”package.favstats来自何处?我想可能是mosaic软件包,所以我添加了调用,但当我尝试复制它时,它不起作用。它在mosaic中。不确定为什么它对您不起作用。在新的R会话中(使用reprex软件包):fav_统计中的Q1警告(x,…,na.rm=na.rm):自动将data.frame转换为#>数值。#>fav_统计数据(x,…,na.rm=na.rm)中的错误:'list'对象无法强制键入'double'
,换句话说,您的代码不起作用;)