Каковы эффективные и точные алгоритмы исключения выбросов из набора данных?
У меня есть набор из 200 строк данных(предполагает небольшой набор данных). Я хочу провести статистический анализ, но до этого я хочу исключить выбросы.
каковы потенциальные algos для этой цели? Точность вызывает беспокойство.
Я очень новичок в статистике, поэтому мне нужна помощь в очень простых algos.
7 ответов
начните с построенияиспользовать исключения, а затем пойти на некоторые хороший ol' бинокулярного травмы (ака посмотреть на диаграмме рассеяния).
многие статистические пакеты имеют выбросы / остаточную диагностику, но я предпочитаю D. Кука вы можете рассчитать его вручную, если хотите использовать эта формула от mtsu.edu (Оригинальная ссылка мертва, это получено из archive.org).
в целом, то, что делает такой вопрос трудным, заключается в том, что нет строгого определения выброса. Я бы на самом деле рекомендовал не использовать определенное количество стандартных отклонений в качестве отсечки по следующим причинам:
- несколько выбросов могут иметь огромный влияние на вашу оценку стандартного отклонения, а стандартное отклонение не является надежной статистики.
- толкование стандартного отклонения зависит чрезвычайно от распространение ваших данных. Если ваши данные нормально распределены, то 3 стандартных отклонения-это много, но если это, например, лог-нормально распределено, то 3 стандартных отклонения-это не много.
есть несколько хороших способов сделать это:
сохраните все данные и просто используйте надежную статистику (медиана вместо среднего, тест Уилкоксона вместо T-теста и т. д.). Наверное, хорошо, если ваш набор данных большой.
обрезать или Winsorize ваши данные. Обрезка означает удаление верхнего и нижнего x%. Winsorizing означает установку верхнего и нижнего x% на значение xth и 1-xth процентиля соответственно.
Если у вас есть небольшой набор данных, вы можете просто построить свои данные и изучить их вручную для неправдоподобных значений.
Если ваши данные выглядят достаточно близко к нормально распределенным (без тяжелых хвостов и грубо симметричным), то используйте среднее абсолютное отклонение вместо стандартное отклонение в качестве тестовой статистики и фильтра до 3 или 4 медианных абсолютных отклонений от медианы.
возможно, вы слышали выражение "Шесть Сигм".
Это относится к Плюс и минус 3 сигма (т. е. стандартные отклонения) вокруг среднего.
все, что выходит за пределы диапазона "Шесть Сигм", может быть лечение как обособленную.
по размышлении, я думаю, что "Шесть Сигм" слишком широки.
в этой статье описывает, как это составляет " 3,4 дефектных деталей на миллион возможностей."
похоже, что строгое требование для целей сертификации. Только ты можешь решить, подходит ли оно тебе.
в зависимости от ваших данных и их значения, вы можете посмотреть в RANSAC (консенсус случайной выборки). Это широко используется в компьютерном зрении и обычно дает отличные результаты при попытке подгонки данных с большим количеством выбросов к модели.
и это очень просто концептуализировать и объяснить. С другой стороны, это не детерминировано, что может вызвать проблемы в зависимости от приложения.
вычислить стандартное отклонение на множестве и исключить все, кроме первого, второго или третьего стандартного отклонения.
вот как я бы это сделал в SQL Server
запрос ниже получит средний вес из вымышленной таблицы Весов, содержащей один взвешивание для каждого человека, не позволяя тем, кто слишком толстый или тонкий, сбросить более реалистичное среднее:
select w.Gender, Avg(w.Weight) as AvgWeight
from ScaleData w
join ( select d.Gender, Avg(d.Weight) as AvgWeight,
2*STDDEVP(d.Weight) StdDeviation
from ScaleData d
group by d.Gender
) d
on w.Gender = d.Gender
and w.Weight between d.AvgWeight-d.StdDeviation
and d.AvgWeight+d.StdDeviation
group by w.Gender
может быть лучший способ сделать это, но он работает и работает хорошо. Если вы столкнулись с другим более эффективным решением, я хотел бы услышать об этом.
Примечание: выше удаляет верхний и Нижний 5% выбросов из картины для целей среднего. Вы можете настроить количество удаленных выбросов, отрегулировав 2* в 2 * STDDEVP в соответствии с:http://en.wikipedia.org/wiki/Standard_deviation
Если вы хотите просто проанализировать его, скажем, вы хотите вычислить корреляцию с другой переменной, это нормально, чтобы исключить выбросы. Но если вы хотите моделировать / прогнозировать,не всегда лучше сразу исключить их.
попробуйте обработать его такими методами, как укупорка или, если вы подозреваете, что выбросы содержат информацию/шаблон, замените его отсутствующим и моделируйте/прогнозируйте его. Я написал несколько примеров того, как вы можете это сделать здесь через р.