Удалить выбросы в r studio
Zuur et al. (2010) отмечают, что РДА наиболее эффективен при использовании разнообразных графических средств, поскольку графики часто позволяют лучше понять структуру и свойства анализируемых данных, чем формальные статистические тесты.
Рассмотрение приведенного РДА-протокола начнем с выявления точек-выбросов. Чувствительность разных статистических методов к наличию выбросов в данных неодинакова. Так, при использовании обобщенной линейной модели для анализа зависимой переменной, распределенной по закону Пуассона (например, количество случаев какого-либо заболевания в разных городах), наличие выбросов может вызвать избыточную дисперсию, что сделает модель неприменимой. В то же время при использовании непараметрического многомерного шкалирования, основанного на индексе Жаккара, все исходные данные переводятся в номинальную шкалу с двумя значениями (1/0), и наличие выбросов никак не сказывается на результат анализа. Исследователь должен четко понимать эти различия между разными методами и при необходимости выполнять проверку на наличие выборосов в данных. Дадим рабочее определение: под "выбросом" мы будем понимать наблюдение, которое "слишком" велико или "слишком" мало по сравнению с большинством других имеющихся наблюдений.
Обычно для выявления выбросов используют диаграммы размахов. В R при построении диаграмм размахов используются устойчивые (робастные) оценки центральной тенденции (медиана) и разброса (интерквартильный размах, ИКР). Верхний "ус" простирается от верхней границы "ящика" до наибольшего выборочного значения, находящегося в пределах расстояния 1.5 х ИКР от этой границы. Аналогично, нижний "ус" простирается от нижней границы "ящика" до наименьшего выборочного значения, находящегося в пределах расстояния 1.5 х ИКР от этой границы. Наблюдения, находящиеся за пределами "усов", рассматриваются как потенциальные выбросы (Рисунок 1).
Рисунок 1. Строение диаграммы размахов. |
- Базовая функция boxplot() (подробнее см. здесь).
- Пакет ggplot2 : геометрический объект ("geom") boxplot . Например:
На Рисунке 2 хорошо выделяется точка, соответствующая длине крыла 68 мм. Однако это значение длины крыла не следует рассматривать в качестве выброса, поскольку оно лишь незначительно отличается от других значений длины. Эта точка выделяется на общем фоне лишь потому, что исходные значения длины крыла были упорядочены по весу птиц. Соответственно, выброс скорее стоит искать среди значений веса (т.е. очень высокое значение длины крыла (68 мм) было отмечено у необычно мало весящего для этого воробья).
С необычными значениями зависимой переменной "бороться" сложнее, особенно при построении регрессионных моделей. Преобразование путем, например, логарифмирования, может помочь, но поскольку зависимая переменная представляет особый интерес при построении регрессионных моделей, лучше попытаться подобрать метод анализа, который основан на распределении вероятностей, допускающем больший разброс значений для больших средних величин (например, гамма-распределение для непрерывных переменных или распределение Пуассона для дискретных количественных переменных). Такой подход позволит работать с исходными значениями зависимой переменной.
В конечном счете решение об удалении необычных значений из анализа принимает сам исследователь. При этом он должен помнить о том, что причины для возникновения таких наблюдений могут быть разными. Так, удаление выбросов, возникших из-за неудачного планирования эксперимента (см. выше пример с температурой), может быть вполне оправданным. Оправданным будет также удаление выбросов, явно возникших из-за ошибок при выполнении измерений. В то же время необычные наблюдения среди значений зависимой переменной могут потребовать более тонкого подхода, особенно если они отражают естественную вариабельность этой переменной. В этой связи важно вести подробное документирование условий, при которых происходит экспериментальная часть исследования - это может помочь интерпретировать "выбросы" в ходе анализа данных. Независимо от причин возникновения необычных наблюдений, в итоговом научном отчете (например, в статье) важно сообщить читателю как о самом факте выявления таких наблюдений, так и о принятых в их отношении мерах.
У меня есть многовариантные данные о красоте и возрасте. Возраст варьируется от 20-40 с интервалом в 2 (20, 22, 24. 40), и для каждой записи данных им предоставляется возраст и рейтинг красоты от 1 до 5. Когда я делаю ящики из этих данных (возрасты по оси X, оценки красоты по оси Y), есть некоторые выбросы, построенные за пределами усов каждой коробки.
Я хочу удалить эти выбросы из самого фрейма данных, но я не уверен, как R вычисляет выбросы для его ящиков. Ниже приведен пример того, как могут выглядеть мои данные.
ОК, вы должны применить что-то подобное к вашему набору данных. Не заменяйте и не сохраняйте, иначе вы уничтожите свои данные! И, кстати, вы должны (почти) никогда не удалять выбросы из ваших данных:
Чтобы увидеть его в действии:
И еще раз, вы никогда не должны делать этого самостоятельно, выбросы просто должны быть! =)
EDIT: Я добавил na.rm = TRUE по умолчанию.
Никто не опубликовал простейший ответ:
Используйте outline = FALSE в качестве опции, когда вы делаете boxplot (читайте справку!).
Функция boxplot возвращает значения, используемые для построения графика (что на самом деле затем выполняется bxp():
Я намеренно не ответил на конкретный вопрос, потому что считаю статистической халатностью устранение "выбросов". Я считаю приемлемой практикой не наносить их на коробчатый график, но удаление их только потому, что они превышают некоторое количество стандартных отклонений или некоторое количество межквартильных ширин, является систематическим и ненаучным искажением данных наблюдений.
Я посмотрел на пакеты, связанные с удалением выбросов, и нашел этот пакет (неожиданно названный "выбросами"!): https://cran.r-project.org/web/packages/outliers/outliers.pdf
если вы пройдете через это, вы увидите различные способы удаления выбросов, и среди них я нашел rm.outlier наиболее удобным для использования и, как сказано в ссылке выше: "Если выброс обнаружен и подтвержден статистическими тестами, эта функция может удалить его или заменить выборочное среднее значение или медиана ", а также вот часть использования из того же источника:
"Usage
Аргументы
xнабор данных, чаще всего вектор. Если аргумент является фреймом данных, то выброс удаляется из каждого столбца с помощью sapply. Такое же поведение применяется при применении когда матрица дается.
fill Если установлено значение TRUE, медиана или среднее значение помещается вместо выброса. В противном случае выброс просто/просто удаляются.
медиана Если установлено значение ИСТИНА, медиана используется вместо среднего значения при замене выбросов. противоположное, если установлено в TRUE, дает противоположное значение (если наибольшее значение имеет максимальную разницу от наименьшего даёт самое маленькое и наоборот) "
Чтобы удалить выбросы в приложении Curve Fitting, выполните эти шаги:
Выберите Tools> Exclude Outliers или нажмите кнопку на панели инструментов .
Когда вы перемещаете курсор мыши в график, он изменяется на перекрестие, чтобы показать, что вы находитесь в режиме выбора выброса.
Кликните по точке, что вы хотите исключить в основном графике или графике невязок. Также перетащите, чтобы задать прямоугольник и удалить все вложенные точки.
Удаленная точка графика становится Красным Крестом в графиках. Если вам выбрали Auto-fit, приложение Curve Fitting переоборудует поверхность без точки. В противном случае можно нажать Fit, чтобы переоборудовать.
Повторитесь для всех точек, которые вы хотите исключить.
При удалении выбросов из поверхностных подгонок может быть полезно отобразить 2D график невязок для исследования и удаления выбросов. С вашим курсором графика в режиме вращения щелкните правой кнопкой по графику выбрать X-Y, X-Z или представление Y-Z.
Заменять человека исключило точки в подгонке, кликните по исключенной точке снова в режиме Exclude Outliers. Чтобы заменить все исключенные точки в подгонке, щелкните правой кнопкой и выберите Clear all exclusions.
В объемных поверхностных диаграммах, чтобы возвратиться к режиму вращения, нажимают кнопку на панели инструментов Exclude outliers снова, чтобы выключить режим выбора выброса.
Исключите области значений данных
Чтобы исключить разделы данных областью значений в приложении Curve Fitting, выполните эти шаги:
Выберите Tools> Exclude By Rule.
Задайте данные, чтобы исключить. Введите номера в любом из полей, чтобы задать начало или конечные интервалы, чтобы исключить в этих X, Y, или данных Z.
Нажмите Enter, чтобы применить правило исключения.
Отображения приложения Curve Fitting заштриховали розовые области на графиках показать исключенные области значений. Исключенные точки становятся красными.
Удалите выбросы программно
Этот пример показывает, как удалить выбросы, когда аппроксимирование кривыми программно, с помощью 'Исключить' аргумента пары имя/значение с подгонкой или fitoptions функционирует. Можно отобразить исключенные данные на графике путем предоставления Исключения или аргумента выбросов с функцией построения графика.
Исключите данные, использующие простое правило
Для простого примера, данных о загрузке и подгонки Гауссово, исключая некоторые данные с выражением, затем строят подгонку, данные и исключенные точки.
Исключите данные расстоянием от модели
Может быть полезно исключить выбросы расстоянием от модели, с помощью стандартных отклонений. Следующий пример показывает, как идентифицировать выбросы с помощью расстояния, больше, чем 1,5 стандартных отклонения от модели, и соответствует устойчивой подгонке, которая дает более низкий вес выбросам.
Создайте базовый синусоидальный сигнал:
Добавьте шум в сигнал с непостоянным отклонением:
Соответствуйте шумным данным базовой синусоидальной моделью:
Идентифицируйте "выбросы" как точки на расстоянии, больше, чем 1,5 стандартных отклонения от базовой модели, и переоборудуйте данные исключенными выбросами:
Сравните эффект исключения выбросов с эффектом предоставления их понижают bisquare вес в устойчивой подгонке:
У меня есть многомерные данные о красоте и возрастах. Возраст варьируется от 20 до 40 с интервалом 2 (20, 22, 24 . 40), и для каждой записи данных им дается возраст и оценка красоты от 1 до 5. Когда я строю прямоугольные диаграммы этих данных (возраст по оси X, оценки красоты по оси Y), за пределами усов каждого прямоугольника отображаются некоторые выбросы.
Я хочу удалить эти выбросы из самого фрейма данных, но я не уверен, как R вычисляет выбросы для своих ящичных диаграмм. Ниже приведен пример того, как могут выглядеть мои данные.
boxplot Функция возвращает выбросы (среди других статистических данных) невидимо. Попробуйте foo <- boxplot(. ); foo прочитать, ?boxplot чтобы понять вывод. Вы должны отредактировать свой вопрос в соответствии с комментарием, который вы дали на ответ @Prasad!Хорошо, вы должны применить что-то подобное к своему набору данных. Не заменяйте и не сохраняйте, иначе вы уничтожите свои данные! И, кстати, вы (почти) никогда не должны удалять выбросы из своих данных:
Чтобы увидеть это в действии:
И еще раз: вы никогда не должны делать это в одиночку, выбросы просто должны быть! знак равно
РЕДАКТИРОВАТЬ: я добавил na.rm = TRUE по умолчанию.
РЕДАКТИРОВАТЬ2: Удалена quantile функция, добавлены индексы, следовательно, функция стала быстрее! знак равно
Никто не опубликовал простейшего ответа:
Действительно элегантно. Спасибо. Но нужно быть осторожным, если распределение имеет более одного режима, а выбросы действительно немногочисленны и разбросаны. Было бы здорово, если бы вы смогли получить их индекс в наборе данных. То, как вы это сделаете, будет фильтровать на основе значения данных. Если коробчатая диаграмма также выполняет группировку, не обязательно одно и то же значение данных будет выпадать в каждой группе Также важно отметить, что это не меняет набор данных. Это всего лишь метод фильтрации. Поэтому, если вы собираетесь использовать набор данных без выбросов, присвойте его переменной. например result = x[!x %in% boxplot.stats(x)$out] Наличие всего одной строчки кода не обязательно означает, что это просто! Не всегда легко разобраться в однострочном коде, особенно для начинающих, и без комментариев.Используйте outline = FALSE как вариант при построении коробчатой диаграммы (прочтите справку!).
Функция boxplot возвращает значения, используемые для построения графика (что на самом деле выполняется с помощью bxp ():
Я намеренно не ответил на конкретный вопрос, потому что считаю статистической халатностью удаление «выбросов». Я считаю приемлемой практикой не наносить их на коробчатую диаграмму, а удаление их только потому, что они превышают некоторое количество стандартных отклонений или некоторое количество межквартильных ширин, является систематическим и ненаучным искажением данных наблюдений.
Что ж, уходить от вопроса, не зная, почему был задан вопрос, тоже не лучшая практика. Да, нецелесообразно удалять «выбросы» из данных, но иногда вам нужны данные без выбросов для конкретных задач. В недавно полученном мной задании по статистике нам нужно было визуализировать набор без выбросов, чтобы определить лучшую регрессионную модель для использования для данных. Так что! Я не считаю совет, который вы, возможно, получили по этому поводу, «определить лучшую регрессионную модель», особенно убедительным. Вместо этого, если вам нужно было удалить выбросы для этой расплывчато заявленной цели, то я думаю, что это плохо отразится на людях, которые это посоветовали, а не свидетельствует о недействительности моей позиции. Я думаю, это законно, когда ты знаешь, что удаляешь "шум". особенно в физиологических данных. Да. Если у вас есть веские основания полагать, что отдельный процесс создает сигнал, это оправдание для удаления из данных.Я искал пакеты, связанные с удалением выбросов, и нашел этот пакет (неожиданно названный «выбросами»!): Https://cran.r-project.org/web/packages/outliers/outliers.pdf,
если вы пройдете через него, вы см. различные способы удаления выбросов, и среди них я нашел rm.outlier наиболее удобный для использования, и, как сказано в приведенной выше ссылке: «Если выброс обнаружен и подтвержден статистическими тестами, эта функция может удалить его или заменить на выборочное среднее или медианное значение» а также часть использования из того же источника:
" Использование
Аргументы
x набор данных, чаще всего вектор. Если аргументом является фрейм данных, то sapply удаляет выброс из каждого столбца. То же поведение применяется с помощью apply, когда задана матрица.
fill Если установлено значение TRUE, вместо выброса помещается медиана или среднее значение. В противном случае выбросы просто удаляются.
median Если установлено значение TRUE, при замене выбросов вместо среднего используется медиана. напротив, если установлено значение ИСТИНА, дает противоположное значение (если наибольшее значение имеет максимальное отличие от среднего, дает наименьшее и наоборот) "
Я считаю, что это очень легко удалить выбросы. В приведенном выше примере я просто извлекаю от 2 до 98 процентилей значений атрибутов.
Читайте также: