удалить выбросы в г очень легко? - PullRequest
0 голосов
/ 08 ноября 2018

Я сейчас пытаюсь удалить выбросы в R очень простым способом. Я знаю, что есть функции, которые вы можете создать самостоятельно для этого, но я хотел бы получить некоторую информацию об этом простом коде и почему он не работает?

outliers <- boxplot(okt$pris)$out

okt_no_out <- okt[-c(outliers),]

boxplot(okt_no_out$pris)

поэтому в первой строке я создаю вектор с выбросами, во втором я создаю новый фрейм данных, опуская значения в этом векторе. Но ... Когда я проверяю новый фрейм данных, только около 400 из 750 выбросов были удалены?

Итак, векторные выбросы содержат примерно 750 строк, но при этом они удаляют только половину из них ....

Итак, мой простой вопрос. Я мог бы быть глупым, но не должны ли эти простые строки кода удалить выбросы очень удобным способом?

// Питер

1 Ответ

0 голосов
/ 08 ноября 2018

boxplot$out возвращает значения для выбросов, а не позиции выбросов. Таким образом, okt[-c(outliers),] удаляет случайные точки в ряду данных, некоторые из них являются выбросами, а другие - нет.

То, что вы можете сделать, это использовать выходные данные из статистики статистики боксплота, чтобы получить конец верхнего и нижнего усов, а затем отфильтровать ваш набор данных, используя эти значения. Смотрите пример ниже:

#test data
testdata<-iris$Sepal.Width

#return boxplot object
b<-boxplot(testdata)

#find extremes from the boxplot's stats output
lowerwhisker<-b$stats[1]
upperwhisker<-b$stats[5]

#remove the extremes
testdata<-testdata[testdata>lowerwhisker & testdata<upperwhisker]

#replot
b<-boxplot(testdata)
...