Quais são os algoritmos eficientes e precisos para excluir outliers de um conjunto de dados?

StackOverflow https://stackoverflow.com/questions/2069793

  •  20-09-2019
  •  | 
  •  

Pergunta

Eu tenho um conjunto de 200 linhas de dados (implica um pequeno conjunto de dados). Quero realizar algumas análises estatísticas, mas antes disso quero excluir valores extremos.

Quais são os algos em potencial para esse fim? A precisão é uma questão de preocupação.

Sou muito novo nas estatísticas, então preciso de ajuda em algos muito básicos.

Foi útil?

Solução

Comece traçando o aproveitar dos outliers e, em seguida, opte por um bom trauma interocular (também conhecido como gráfico de dispersão).

Muitos pacotes estatísticos têm diagnósticos externos/residuais, mas eu prefiro o Cook's D. Você pode calculá -lo manualmente, se quiser usar Esta fórmula de mtsu.edu (Link original está morto, é proveniente do arquivo de Archive.org).

Outras dicas

No geral, o que torna uma pergunta como essa é que não há uma definição rigorosa de um outlier. Eu realmente recomendaria o uso de um certo número de desvios padrão como ponto de corte pelos seguintes motivos:

  1. Alguns outliers podem ter um enorme Impacto na sua estimativa de desvio padrão, pois o desvio padrão não é uma estatística robusta.
  2. A interpretação do desvio padrão depende enormemente da distribuição de seus dados. Se seus dados são normalmente distribuídos, 3 desvios padrão serão muito, mas se, por exemplo, distribuídos de log-normalmente, 3 desvios padrão não serão muito.

Existem algumas boas maneiras de prosseguir:

  1. Mantenha todos os dados e use estatísticas robustas (mediana em vez de média, teste de Wilcoxon em vez de teste t, etc.). Provavelmente bom se o seu conjunto de dados for grande.

  2. Aparar ou vencer seus dados. A corte significa remover o x%superior e inferior. Winsorizing significa definir o valor X% e inferior para o valor Xth e 1-Xth percentil, respectivamente.

  3. Se você possui um pequeno conjunto de dados, você pode traçar seus dados e examiná -los manualmente quanto a valores implausíveis.

  4. Se seus dados parecerem razoavelmente próximos de distribuídos normalmente (sem caudas pesadas e aproximadamente simétricas), use o Desvio absoluto médio em vez do desvio padrão como estatística de teste e filtrar para 3 ou 4 desvios absolutos medianos da mediana.

Você pode ter ouvido a expressão 'Six Sigma'.

Isso se refere a Plus e menos 3 sigma (ou seja, desvios padrão) em torno da média.

Qualquer coisa fora da linha 'Six Sigma' pode ser tratado como um outlier.

Ao refletir, acho que 'Six Sigma' é muito largo.

Este artigo Descreve como isso equivale a "3,4 partes defeituosas por milhão de oportunidades".

Parece um requisito bastante rigoroso para fins de certificação. Só você pode decidir se isso combina com você.

Dependendo dos seus dados e do seu significado, você pode querer investigar Ransac (Consenso de amostra aleatória). Isso é amplamente utilizado na visão computacional e geralmente fornece excelentes resultados ao tentar ajustar dados com muitos outliers a um modelo.

E é muito simples de conceituar e explicar. Por outro lado, não é determinístico, o que pode causar problemas, dependendo do aplicativo.

Calcule o desvio padrão no conjunto e exclua tudo fora do primeiro ou terceiro desvio padrão.

Aqui está como eu iria fazer isso no SQL Server

A consulta abaixo terá o peso médio de uma mesa de escala fictícia, mantendo uma única pesagem para cada pessoa, sem permitir aqueles que são excessivamente gordos ou magros para jogar fora a média mais realista:

  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  

Pode haver uma maneira melhor de fazer isso, mas funciona e funciona bem. Se você encontrou outra solução mais eficiente, eu adoraria ouvir sobre isso.

NOTA: O acima remove os 5% superior e inferior dos outliers fora de cena para fins da média. Você pode ajustar o número de outliers removidos ajustando o 2* no 2* stddevp conforme: http://en.wikipedia.org/wiki/Standard_Devievie

Se você deseja analisá -lo, diga que deseja calcular a correlação com outra variável, não há problema em excluir outliers. Mas se você deseja modelar / prever, nem sempre é melhor excluí -los imediatamente.

Tente tratá -lo com métodos como captura ou se você suspeitar que os valores extremos contêm informações/padrão, substitua -as por falta e modelem/prevê -as. Eu escrevi alguns exemplos de como você pode fazer isso aqui usando R.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top