У меня есть многомерные данные о красоте и возрастах. Возраст варьируется от 20 до 40 с интервалом 2 (20, 22, 24 .... 40), и для каждой записи данных им дается возраст и оценка красоты от 1 до 5. Когда я строю прямоугольные диаграммы этих данных (возраст по оси X, оценки красоты по оси Y), за пределами усов каждого прямоугольника отображаются некоторые выбросы.
Я хочу удалить эти выбросы из самого фрейма данных, но я не уверен, как R вычисляет выбросы для своих ящичных диаграмм. Ниже приведен пример того, как могут выглядеть мои данные.
r
statistics
outliers
Дэн Кью
источник
источник
boxplot
Функция возвращает выбросы (среди других статистических данных) невидимо. Попробуйтеfoo <- boxplot(...); foo
прочитать,?boxplot
чтобы понять вывод.Ответы:
Хорошо, вы должны применить что-то подобное к своему набору данных. Не заменяйте и не сохраняйте, иначе вы уничтожите свои данные! И, кстати, вы (почти) никогда не должны удалять выбросы из своих данных:
Чтобы увидеть это в действии:
И еще раз: вы никогда не должны делать это в одиночку, выбросы просто должны быть! знак равно
РЕДАКТИРОВАТЬ: я добавил
na.rm = TRUE
по умолчанию.РЕДАКТИРОВАТЬ2: Удалена
quantile
функция, добавлены индексы, следовательно, функция стала быстрее! знак равноисточник
boxplot
. Это выполнимо, и тогда вы должны отметить ответ @Prasad, поскольку он ответил на ваш вопрос. Если вы хотите исключить выбросы с помощью «правила выбросов»q +/- (1.5 * H)
, следовательно, провести некоторый анализ, используйте эту функцию. Кстати, я сделал это с нуля, без поиска в Google, так что есть шанс, что я заново изобрел колесо с этой моей функцией ...Никто не опубликовал простейшего ответа:
Также см. Это: http://www.r-statistics.com/2011/01/how-to-label-all-the-outliers-in-a-boxplot/
источник
result = x[!x %in% boxplot.stats(x)$out]
Используйте
outline = FALSE
как вариант при построении коробчатой диаграммы (прочтите справку!).источник
out
иgroup
пункты в списке).Функция boxplot возвращает значения, используемые для построения графика (что на самом деле выполняется с помощью bxp ():
Я намеренно не ответил на конкретный вопрос, потому что считаю статистической халатностью удаление «выбросов». Я считаю приемлемой практикой не наносить их на коробчатую диаграмму, а удаление их только потому, что они превышают некоторое количество стандартных отклонений или некоторое количество межквартильных ширин, является систематическим и ненаучным искажением данных наблюдений.
источник
Я искал пакеты, связанные с удалением выбросов, и нашел этот пакет (неожиданно названный «выбросами»!): Https://cran.r-project.org/web/packages/outliers/outliers.pdf,
если вы пройдете через него, вы см. различные способы удаления выбросов, и среди них я нашел
rm.outlier
наиболее удобный для использования, и, как сказано в приведенной выше ссылке: «Если выброс обнаружен и подтвержден статистическими тестами, эта функция может удалить его или заменить на выборочное среднее или медианное значение» а также часть использования из того же источника:" Использование
Аргументы
x набор данных, чаще всего вектор. Если аргументом является фрейм данных, то sapply удаляет выброс из каждого столбца. То же поведение применяется с помощью apply, когда задана матрица.
fill Если установлено значение TRUE, вместо выброса помещается медиана или среднее значение. В противном случае выбросы просто удаляются.
median Если установлено значение TRUE, при замене выбросов вместо среднего используется медиана. напротив, если установлено значение ИСТИНА, дает противоположное значение (если наибольшее значение имеет максимальное отличие от среднего, дает наименьшее и наоборот) "
источник
Я считаю, что это очень легко удалить выбросы. В приведенном выше примере я просто извлекаю от 2 до 98 процентилей значений атрибутов.
источник
Не будет:
справиться с этой задачей довольно легко?
источник
Добавив к предложению @sefarkas и используя квантиль в качестве отсечки, можно было бы изучить следующий вариант:
Это удалит точки за пределами 99-го квантиля. Следует проявлять осторожность, как то, что aL3Xa говорил о сохранении выбросов. Его следует удалять только для получения альтернативного консервативного представления данных.
источник
0.91
или0.99
? как вmydata$var < quantile(mydata$var, probs=c(.01, .91))[1])
илиmydata$var < quantile(mydata$var, probs=c(.01, .99))[1])
1 способ сделать это
или
источник
Выбросы очень похожи на пики, поэтому детектор пиков может быть полезен для выявления выбросов. Описанный здесь метод имеет неплохую производительность с использованием z-значений. Анимация частично вниз по странице иллюстрирует метод, сигнализирующий о выбросах или пиках.
Пики не всегда совпадают с выбросами, но часто они похожи.
Здесь показан пример: Этот набор данных считывается с датчика по последовательной связи. Случайные ошибки последовательной связи, ошибка датчика или и то, и другое приводят к повторяющимся, явно ошибочным точкам данных. В этом пункте нет статистической ценности. Возможно, это не выбросы, а ошибки. Детектор пиков z-значений смог сигнализировать о ложных точках данных и сгенерировал чистый результирующий набор данных:
источник
Попробуй это. Подайте свою переменную в функцию и сохраните o / p в переменной, которая будет содержать удаленные выбросы
источник