Каковы эффективные и точные алгоритмы для исключения выбросов из набора данных? - PullRequest
11 голосов
/ 15 января 2010

У меня есть набор из 200 строк данных (подразумевается небольшой набор данных). Я хочу провести некоторый статистический анализ, но перед этим я хочу исключить выбросы.

Каковы потенциальные алгоритмы для этой цели? Точность вызывает беспокойство.

Я очень новичок в статистике, поэтому мне нужна помощь в самых простых алгоритмах.

Ответы [ 7 ]

22 голосов
/ 15 января 2010

В целом, вопрос, который делает такой вопрос трудным, состоит в том, что нет строгого определения выброса. На самом деле я бы рекомендовал не использовать определенное количество стандартных отклонений в качестве отсечки по следующим причинам:

  1. Некоторые выбросы могут оказать огромное влияние на вашу оценку стандартного отклонения, поскольку стандартное отклонение не является надежной статистикой.
  2. Интерпретация стандартного отклонения в значительной степени зависит от распределения ваших данных. Если ваши данные обычно распределяются, то 3 стандартных отклонения - это много, но если они, например, логарифмически распределяются нормально, то 3 стандартных отклонения - это не много.

Есть несколько хороших способов продолжить:

  1. Сохраните все данные и просто используйте надежную статистику (медиана вместо среднего значения, критерий Уилкоксона вместо Т-критерия и т. Д.). Вероятно, хорошо, если ваш набор данных большой.

  2. Обрежьте или улучшите ваши данные. Подрезка означает удаление верхнего и нижнего х%. Winsorizing означает установку верхнего и нижнего x% значения x и 1 x процентиля соответственно.

  3. Если у вас небольшой набор данных, вы можете просто построить свои данные и проверить их вручную на предмет неправдоподобных значений.

  4. Если ваши данные выглядят достаточно близко к нормальному распределению (без тяжелых хвостов и примерно симметрично), тогда используйте стандартное абсолютное отклонение вместо стандартного отклонения в качестве статистики теста и выберите значение 3 4 срединных абсолютных отклонения от медианы.

5 голосов
/ 19 января 2010

Начните с построения рычага выбросов, а затем перейдите к некоторой хорошей межокулярной травме (иначе посмотрите на диаграмму рассеяния).

Множество статистических пакетов имеют диагностику выбросов / остатков, но я предпочитаю Кука D. Вы можете рассчитать его вручную, если хотите использовать эту формулу из mtsu.edu (исходная ссылка не работает, это Источник: archive.org).

2 голосов
/ 15 января 2010

В зависимости от ваших данных и их значения, вы можете посмотреть RANSAC (консенсус по случайной выборке). Это широко используется в компьютерном зрении и, как правило, дает отличные результаты при попытке подгонки данных с большим количеством выбросов к модели.

И это очень просто осмыслить и объяснить. С другой стороны, он недетерминирован, что может вызвать проблемы в зависимости от приложения.

2 голосов
/ 15 января 2010

Возможно, вы слышали выражение «шесть сигм».

Это относится к сигме плюс и минус 3 (т.е. стандартные отклонения) вокруг среднего значения.

Все, что находится вне диапазона «шести сигм», может быть обработано как выброс.

Если подумать, я думаю, что «шесть сигм» слишком широк.

В этой статье описывается, как она составляет «3,4 бракованных деталей на миллион возможностей».

Это кажется довольно жестким требованием для целей сертификации. Только вы можете решить, подходит ли вам это.

1 голос
/ 15 января 2010

Рассчитать стандартное отклонение на множестве и исключить все, что находится за пределами первого, второго или третьего стандартного отклонения.

0 голосов
/ 15 апреля 2016

Если вы хотите просто проанализировать его, скажем, что вы хотите вычислить корреляцию с другой переменной, можно исключить выбросы. Но если вы хотите смоделировать / предсказать, не всегда лучше сразу исключать их.

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

0 голосов
/ 17 февраля 2010

Вот как бы я поступил в SQL Server

Приведенный ниже запрос получит средний вес из вымышленной таблицы Scale, содержащей по одному взвешиванию для каждого человека, не позволяя тем, кто слишком толстый или худой, сбросить более реалистичное среднее:

  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

...