【问题标题】:changing outlier rule from IQR to standard devations in geom_boxplot将异常值规则从 IQR 更改为 geom_boxplot 中的标准差
【发布时间】:2018-06-29 03:03:46
【问题描述】:

我知道geom_boxplot() 的默认设置是:

  • Q3 + 1.5 * IQR
  • Q1 - 1.5 * IQR

但我想从平均值做 4 个标准差:

  • 平均值 + 4 * SD
  • 平均值 - 4 * SD

这可以在ggplot2中做到吗?如果没有,还有什么办法?

我看到一个帖子询问如何更改为不同的 IQR,但我对更改为标准差特别感兴趣。

【问题讨论】:

  • @MLavoie 感谢您的链接。我只是看了看,找不到任何特定于将异常值定义更改为 SD 的内容。您是否有您所指的特定部分?
  • 你可以创建一个新的 stat..可以与 stat_summary 合作使用,它可以包含在你的 geom_boxplot() 中
  • 我能看到的最接近的就是这里的文档rdocumentation.org/packages/ggplot2/versions/2.2.1/topics/…。了解coef 甚至outliers 的要点
  • 扩展@InfiniteFlashChess' 评论:使用geom_boxplot(..., stat = "identity") 并查看?geom_boxplot 以获取有关如何更改此函数的默认计算的示例。

标签: r ggplot2 boxplot outliers standard-deviation


【解决方案1】:

这可以通过stat = "identity" 来完成,正如一些 cmets 中所提到的,但诀窍是将异常值放入数据中。异常值需要在列表列中提供。以下是你的做法。

首先,补一些数据,画一个常规的箱线图:

set.seed(123)
d <- data.frame(y = c(rnorm(100), rnorm(100)+.5, rnorm(100)-1),
                x = rep(c("A", "B", "C"), each = 100))

ggplot(d, aes(x, y)) + geom_boxplot()

现在,手动计算统计数据并使用替代异常值定义绘制箱线图。请注意,我使用平均值 +/- 2*SD,所以我得到了更多的异常值。如何将代码更改为 +/- 4*SD 应该很明显。

library(dplyr)

d %>% group_by(x) %>%
  summarize(middle = median(y),
            mean = mean(y),
            sd = sd(y),
            lower = quantile(y, probs = .25),
            upper = quantile(y, probs = .75),
            ymin = max(mean - 2*sd, min(y)),
            ymax = min(mean + 2*sd, max(y)),
            outliers = list(y[y<ymin | y > ymax])) %>%
  ggplot(aes(x, ymin = ymin, lower = lower,
             middle = middle, upper = upper, ymax = ymax,
             outliers = outliers)) + 
  geom_boxplot(stat = "identity")

免责声明:我只用 ggplot2 的当前开发版本对此进行了测试,不确定它是否适用于当前 CRAN 上的版本。

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 2021-01-12
    • 2020-05-06
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多