Как я могу увидеть выброс нескольких переменных в одном блокпосте, используя R?
Я новичок в Р. У меня есть вопрос. Для проверки выброса переменной мы обычно используем:
boxplot(train$rate)
Предположим, скорость - это переменная моих наборов данных, а train - это имя моих наборов данных. Но когда у меня есть несколько переменных, таких как 100 или 150 переменных, тогда будет очень много времени, чтобы проверить выбросы по одной переменной. Есть ли какая-нибудь функция, чтобы вывести выбросы 100 переменных в одном блокпосте?
Если да, то какая функция используется для удаления выбросов этих переменных за один раз вместо одного за другим? Пожалуйста, помогите решить эту проблему.
заранее спасибо
2 ответа
Я согласен с Руи Баррадасом в том, что убирать выбросы без дальнейших размышлений - плохая практика. Пока значение действительно, вы должны хранить его в своих данных или, по крайней мере, выполнить два отдельных анализа с и без влиятельного значения. Вы можете использовать цикл 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
}
Функция boxplot
возвращает значение Если вы видите Value
раздел его страницы справки, вы увидите, что это список с именованными компонентами, один из которых out
, Это тот, который вы, кажется, ищете.
bp <- boxplot(train$rate)
bp$out
clean <- train$rate[-which(train$rate %in% bp$out)] # to remove the outliers
Я бы тоже так не поступил. Выбросы - это данные, и они могут быть нормальными / вероятными. Исключая их, вы не принимаете во внимание полноту ваших данных, что является плохой практикой.