前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >去除箱线图中的outliers

去除箱线图中的outliers

作者头像
生信编程日常
发布2020-12-23 15:18:16
3.9K0
发布2020-12-23 15:18:16
举报

异常值outlier:指样本中的个别值,其数值明显偏离它(或他们)所属样本的其余观测值,也称异常数据,离群值。当遇到一组数据中有少量outliers,一般是需要剔除,避免对正确的结果造成干扰。我们可以通过箱线图来检测并去除outliers. 箱线图可以通过5个数来概括:最小值,最大值,下四分位(Q1,在25%位置),上四分位(Q3,在75%位置),中位值(50%位置)。箱线图能够显示离群点,可以通过IQR(InterQuartile Range,四分位距即Q3-Q1)计算得到。该离群点定义为异常值被定义为小于Q1-1.5IQR或大于Q3+1.5IQR的值。 UpperLimit=Q3+1.5IQR=75%分位数+1.5(75%分位数-25%分位数) LowerLimit=Q1-1.5IQR=25%分位数 - 1.5(75%分位数-25%分位数) 即在UpperLimit与LowerLimit之外的值为outlier。

创建data.frame

代码语言:javascript
复制
element <- sample(letters[1:3], 1e3, replace=T)
value <- rnorm(1e3)
df <- data.frame(element, value)
head(df)

查看是否有离群值

代码语言:javascript
复制
ggplot(df, aes(x=element, y=value,color=element)) + 
  geom_boxplot(outlier.colour="red", outlier.shape=7,outlier.size=1)

因此,存在离群值(红色的方点),下面去除离群值。 首先定义一个函数,将outliers替换成NA。

代码语言:javascript
复制
remove_outliers <- function(x, na.rm = TRUE, ...) {
  qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
  H <- 1.5 * IQR(x, na.rm = na.rm)
  y <- x
  y[x < (qnt[1] - H)] <- NA
  y[x > (qnt[2] + H)] <- NA
  y
}

删除含有outliers(NA)的行

代码语言:javascript
复制
library(dplyr)
df2 <- df %>%
  group_by(element) %>%
  mutate(value = remove_outliers(value))
df2<-df2[complete.cases(df2),]

查看删除离群值之后的boxplot,可以看到大部分离群值已去除。

代码语言:javascript
复制
ggplot(df2, aes(x=element, y=value,color=element)) + 
  geom_boxplot(outlier.colour="red", outlier.shape=7,outlier.size=1)

参考:https://www.jianshu.com/p/80848dfb0ec8

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档