如何使用 R 在一个箱线图中查看多个变量的离群值?
How can I see multiple variable's outlier in one boxplot using R?
我是R的新手,我有一个问题。为了检查变量的异常值,我们通常使用:
boxplot(train$rate)
假设,rate 是我的数据集的变量,train 是我的数据集名称。但是当我有多个变量时,比如 100 或 150 个变量,那么逐个检查变量的离群值将非常耗时。有什么函数可以把100个变量的异常值放在一个箱线图中吗?
如果是,那么哪个函数用于一次删除那些变量的离群值而不是一个一个地删除?请帮助解决这个问题。
提前致谢
函数boxplot
returns一个值。如果您看到其帮助页面的 Value
部分,您会看到它是一个包含命名组件的列表,其中之一是 out
。这就是您要找的人。
bp <- boxplot(train$rate)
bp$out
clean <- train$rate[-which(train$rate %in% bp$out)] # to remove the outliers
我也不会那样做。异常值是数据,并且 normal/likely 会发生。通过消除它们,您没有考虑到您的全部数据,这是一种不好的做法。
我同意 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
包有一个函数采用不同的方法来识别异常值并且不需要绘图。
这使用 extremevalues
包
中的 getOutliers
函数
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
}
我是R的新手,我有一个问题。为了检查变量的异常值,我们通常使用:
boxplot(train$rate)
假设,rate 是我的数据集的变量,train 是我的数据集名称。但是当我有多个变量时,比如 100 或 150 个变量,那么逐个检查变量的离群值将非常耗时。有什么函数可以把100个变量的异常值放在一个箱线图中吗?
如果是,那么哪个函数用于一次删除那些变量的离群值而不是一个一个地删除?请帮助解决这个问题。
提前致谢
函数boxplot
returns一个值。如果您看到其帮助页面的 Value
部分,您会看到它是一个包含命名组件的列表,其中之一是 out
。这就是您要找的人。
bp <- boxplot(train$rate)
bp$out
clean <- train$rate[-which(train$rate %in% bp$out)] # to remove the outliers
我也不会那样做。异常值是数据,并且 normal/likely 会发生。通过消除它们,您没有考虑到您的全部数据,这是一种不好的做法。
我同意 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
包有一个函数采用不同的方法来识别异常值并且不需要绘图。
这使用 extremevalues
包
getOutliers
函数
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
}