r - GGPubr 与 R-Boxplot 显示不同的极值
问题描述
我使用常规的“箱线图”功能来检查我的数据是否存在极值。对于项目中的演示,然后我使用包 ggpubr(它基于 ggplot2)创建了相同的箱线图。
据我所知,胡须应该代表两个印迹中的相同区域。令我惊讶的是,ggpubr boxplot 中出现了一个极值,而 r-boxplot 中没有显示。
代码 R-箱线图:
boxplot(data$vtrust_post1, data$vtrust_post2)
代码 Ggpubr:
vtrust_a_b_long %>%
ggboxplot(x = "drive", y = "count", bxp.errorbar = TRUE)
对于 ggpubr,我必须将数据转换为长格式:
vtrust_a_b <- data.frame("subject_no" = data$id, "a" = data$vtrust_post1, "b" = data$vtrust_post2)
vtrust_a_b_long <- vtrust_a_b %>%
gather(key = "drive", value = "count", a, b)
我做错什么了吗?两个数据包含相同的最大值。可能是 r-boxplot 和 ggpubr/ggplot2 中的极值定义不同吗?
我非常感谢您的帮助!
更新:重现问题的代码
使用此代码,它仅表示 ggpubr 版本的极值。
a <- c(1.50, 3.50, 1.50, 3.00, 1.25, 5.25, 2.50, 2.50, 1.50, 2.25, 1.75, 2.25, 2.25, 2.25, 4.50, 2.25, 3.25, 1.25, 2.50, 2.75, 1.75, 4.25, 2.75, 2.00,
1.75, 3.50, 3.25, 3.00, 1.25, 1.25, 3.75, 1.50, 1.75, 2.25, 1.25, 2.00, 1.50, 3.50, 1.75, 3.25)
boxplot(a)
ggpubr::ggboxplot(a)
更新 2 由于提示,它可能是由 R 中的本地设置引起的,我在https://rdrr.io/snippets/尝试了代码。再次出现差异:
解决方案
查看 base R 的源代码graphics::boxplot
,第 48 行显示晶须是由 计算的grDevices::boxplot.stats
。查看源代码boxplot.stats
(通过在提示符下键入)发现它用于stats::fivenum
计算绘制胡须的距离。
fivenum(a)
#[1] 1.250 1.625 2.250 3.125 5.250
源代码的第 156 和 157 行graphics::boxplot
显示晶须从第二个值延伸到第一个值,然后从第四个值延伸到第五个值。
相比之下,查看源代码geom_boxplot
向我们展示了晶须延伸到最近的数据点,该数据点距离铰链不超过 IQR 的 1.5 倍。这是通过以下方式计算的stats::quantile
:
quantile(a,0.75) + diff(quantile(a,c(0, 0.25, 0.5, 0.75, 1))[c(2,4)])*1.5
#5.125
由于元素 6a
是5.25
,它大于5.125
,因此,晶须不会延伸到该点。
推荐阅读
- firebase - 如何检查文件名是否包含 Firebase 存储安全规则中的 uid?
- django - 具有不同路径的 django 静态文件
- android - java.io.ioexception 连接改造android上的流意外结束
- terraform - Terraform 在导入当前状态后询问“ami”和“instance_type”
- azure - 无法在 terraform azure 提供程序中获取 SystemAssigned 身份属性
- excel - Excel - 基于另一列的公式链接单元格
- google-maps - Mackbook safari location 一次又一次询问,即使我允许了
- android - W/BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod() 返回 Gms:com.google.firebase.auth.api.internal.zzal@395d2a7 错误
- forms - Codeignter 3图像上传代码不起作用
- javascript - 无需单击按钮即可将数据视图移动到 javascript