如何使用R在一个箱图中看到多个变量的异常值?

时间:2017-07-18 09:52:12

标签: r linear-regression boxplot

我是R的新手。我有一个问题。为了检查变量的异常值,我们通常使用:

{{1}}

假设,rate是我的数据集的变量,train是我的数据集名称。但是当我有多个变量(如100或150个变量)时,检查逐个变量的异常值将非常耗时。是否有任何函数可以将100个变量的异常值放在一个箱图中?

如果是,那么使用哪个函数一次删除那些变量的异常值而不是一个一个?请帮助解决这个问题。

提前致谢

2 个答案:

答案 0 :(得分:1)

我同意Rui Barradas的说法,不加思索地删除异常值是不好的做法。只要该值有效,您应将其保留在数据中,或者至少运行两个单独的分析,无论有无影响的值。您可以使用for循环将函数应用于数据集中的每个变量。

train2<-train # Copy old dataset
outvalue<-list() # Create two empty lists
outindex<-list()
for(i in 1:ncol(train2){ # For every column in your dataset
  outvalue[[i]]<-boxplot(train2[,i])$out # Plot and get the outlier value
  outindex[[i]]<-which(train2[,i] == outvalue[[i]]) # Get the outlier index
  train2[outindex[[i]],i] <- NA # Remove the outliers
}

这可以工作并绘制数据,但速度很慢。如果您不想绘制数据但只想要查看异常值,可以查看其他异常值函数,extremevalues包有一个函数,它采用不同的方法来识别异常值并且不需要绘图。 这使用getOutliers

中的extremevalues函数
outRight<-list()
outLeft<-outRight
for(i in 1:ncol(train2){
  outRight[[i]]<-getOutliers(train2[,i])$iRight
  outLeft[[i]]<-getOutliers(train2[,i])$iLeft
  train2[outRight[[i]],i] <- NA
  train2[outLeft[[i]],i] <- NA
}

答案 1 :(得分:0)

函数boxplot返回一个值。如果您看到其帮助页面的Value部分,则会看到它是包含命名组件的列表,其中一个是out。那是你似乎在寻找的那个。

bp <- boxplot(train$rate)
bp$out
clean <- train$rate[-which(train$rate %in% bp$out)]   # to remove the outliers

我也不会这样做。异常值是数据,正常/可能发生。通过消除它们,您没有考虑到整个数据,这是一种不好的做法。