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

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

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

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

11
задан quamrana 21 June 2012 в 10:56
поделиться

6 ответов

Начните с построения плеча выбросов, а затем пойти на некоторую пользующуюся дружелюбную травму (AKA посмотреть на разброс).

Многие статистические пакеты имеют выброс / остаточную диагностику, но я предпочитаю D. D. Вы можете рассчитать его вручную, если вы хотите использовать , эта формула от MTSU.EDU (Оригинальная ссылка мертвана, это получен из Archive.org).

5
ответ дан 3 December 2019 в 02:19
поделиться

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

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

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

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

Эта статья описывает, как она составляет «3.4 дефектных частей на миллион возможностей».

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

3
ответ дан 3 December 2019 в 02:19
поделиться

Это должно надежно привести к SigBus на системе, соответствующей POSIX.

#include <unistd.h>
#include <stdio.h>
#include <sys/mman.h>
int main() {
    FILE *f = tmpfile();
    int *m = mmap(0, 4, PROT_WRITE, MAP_PRIVATE, fileno(f), 0);
    *m = 0;
    return 0;
}

Из одной спецификации Unix MMAP :

ссылки в диапазоне адресов, начиная с PA и продолжение Len байты на все страницы после Конец объекта должен привести к доставке сигнала SIGBUS.

-121--2370485-

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

1
ответ дан 3 December 2019 в 02:19
поделиться

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

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

Существует несколько хороших способов действовать:

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

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

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

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

22
ответ дан 3 December 2019 в 02:19
поделиться

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

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

2
ответ дан 3 December 2019 в 02:19
поделиться

Вот как я бы сделал это в 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

0
ответ дан 3 December 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: