Qual é a melhor maneira de identificar discrepantes em dados multivariados?


94

Suponha que eu tenha um grande conjunto de dados multivariados com pelo menos três variáveis. Como posso encontrar os outliers? Os gráficos de dispersão em pares não funcionarão, pois é possível que um outlier exista em três dimensões que não seja um outlier em nenhum dos subespaços bidimensionais.

Não estou pensando em um problema de regressão, mas em dados multivariados verdadeiros. Portanto, respostas que envolvam regressão robusta ou alavancagem computacional não são úteis.

Uma possibilidade seria calcular as pontuações dos componentes principais e procurar um valor externo no gráfico de dispersão bivariado das duas primeiras pontuações. Isso seria garantido para o trabalho? Existem abordagens melhores?


3
Se uma matriz de gráficos de dispersão não a capturar, tente um gráfico de dispersão 3D. Isso não funcionará em 4D, é claro, mas você pode criar uma quarta dimensão com o tempo e fazer um filme. :)
Shane

E a análise de cluster (hierárquica)?
Andrej

11
5 D na matiz de cor, 6ª D na intensidade da cor, 7 D no tamanho do ponto e nós podemos ir ;-)

Respostas:


26

Dê uma olhada no pacote mvoutlier , que depende de distâncias robustas ordenadas dos mahalanobis, conforme sugerido por @drknexus.


4
Pessoalmente, não acredito neste pacote! Eu acho que isso é apenas ruído da ciência. Esse tipo de teoria é muito bom para dados simulados, enquanto apenas pffff para dados reais. Usei este pacote para, por exemplo, detectar discrepâncias :-) infelizmente, metade dos meus dados detectou discrepâncias :-D é engraçado como as pessoas publicam algumas (não sei como chamar isso). se você tiver algum comentário, ficarei feliz em ver. Temos muitos tipos de discrepantes, mas devemos removê-los de nossos dados? Eu acredito que nao.
Learner

1
Você poderia explicar quando e por que isso funciona?
eric_kernfeld 25/01

19

Acho que a resposta de Robin Girard funcionaria muito bem para 3 e possivelmente 4 dimensões, mas a maldição da dimensionalidade impediria que funcionasse além disso. No entanto, sua sugestão me levou a uma abordagem relacionada, que é aplicar a estimativa de densidade de kernel validada cruzadamente às três primeiras pontuações de componentes principais. Em seguida, um conjunto de dados de alta dimensão ainda pode ser tratado ok.

Em resumo, para i = 1 en

  1. Calcule uma estimativa de densidade das três primeiras pontuações de componentes principais obtidas a partir do conjunto de dados sem Xi.
  2. Calcule a probabilidade de Xi para a densidade estimada na etapa 1. chame-a de Li.

fim para

Classifique o Li (para i = 1, .., n) e os valores extremos são aqueles com probabilidade abaixo de algum limite. Não sei o que seria um bom limite - deixarei para quem escreve o artigo sobre isso! Uma possibilidade é fazer um boxplot dos valores do log (Li) e ver quais outliers são detectados no final negativo.


Obrigado por esta resposta (deve ser um comentário?) Como já mencionei, como um comentário à dimensão Alta da resposta rica não é um problema (até 1000 podem funcionar) se você fizer uma suposição estrutural paramétrica.
Robin girard

@rob "Não tenho certeza do que seria um bom limite", esse seria o objetivo do procedimento de teste múltiplo que mencionei .... mas concordo plenamente que as coisas precisam ser preenchidas e eu realmente gosto da detecção de discrepâncias em a detecção outlier! quem quer escrever um artigo :)?
Robin girard

4
(-1) É um pouco perturbador o fato de a resposta aceita a esta pergunta não ser útil (por exemplo, vaga demais e não implementada) nem cientificamente correta (como nem mesmo errada: até onde eu sei, ela nem é mencionada na Literatura relevante).
user603

6
(-1) isso parece ser uma resposta incorreta - esse método não detectará valores discrepantes! é fácil imaginar uma nuvem de pontos em forma de panqueca 3D projetada pelo PCA em um plano 2D e um ponto externo que está longe do avião, mas sua projeção está bem no meio da nuvem projetada, portanto, a "densidade do kernel" de o ponto no plano 2D será alto, embora seja um desvio.
Kochede

1
Eu acho que o PCA seria problemático aqui. PCA é uma aproximação que considera as principais contribuições para a variância. Mas aqui o objetivo é encontrar discrepâncias - elas não "cairiam entre as fendas"?
Omry Atia

18

Você pode encontrar um resumo pedagógico dos vários métodos disponíveis em (1)

Para algumas comparações numéricas - recentes - dos vários métodos listados lá, você pode verificar (2) e (3) .

existem muitas comparações numéricas mais antigas (e menos exaustivas), geralmente encontradas em livros. Você encontrará um nas páginas 142-143 de (4), por exemplo.

Observe que todos os métodos discutidos aqui têm uma implementação R de código aberto, principalmente por meio do pacote rrcov .

  • (1) P. Rousseeuw e M. Hubert (2013) Estimadores de alta avaria de localização e dispersão multivariadas.
  • (2) M. Hubert, P. Rousseeuw, K. Vakili (2013). Viés de forma de estimadores robustos de covariância: um estudo empírico. Artigos Estatísticos.
  • (3) K. Vakili e E. Schmitt (2014). Localizando outliers multivariados com o FastPCS. Estatística Computacional e Análise de Dados.
  • (4) Maronna RA, Martin RD e Yohai VJ (2006). Estatística Robusta: Teoria e Métodos. Wiley, Nova Iorque.

Eu não recomendaria trabalhos baseados em dados simulados, acredito que os dois primeiros trabalhos sejam baseados em dados simulados. Eu estou trabalhando em dados reais e RARAMENTE, esses valores discrepantes fortes simulados podem ser encontrados em dados. Eu pessoalmente nunca encontrei um conjunto de dados com valores discrepantes muito fortes. Se você conhece algum dado real, não hesite em compartilhar
Aluno

Oi Nemo: obrigado pelo seu comentário. Na verdade, verifica-se que, para muitos (infelizmente nem todos) desses modelos, a pior configuração possível de discrepantes é realmente conhecida e essas são as configurações que as pessoas normalmente simulam e avaliam esses modelos. Talvez você possa formular isso como uma pergunta? Eu ficaria mais do que feliz em apontar para algumas referências!
user603

1
Eu já fiz uma pergunta geral. Você pode encontrar minha publicação aqui stats.stackexchange.com/questions/139645/…
Aluno

13

Eu faria algum tipo de "deixar de fora um algoritmo de teste" (n é o número de dados):

para i = 1 en

  1. calcule uma estimativa de densidade do conjunto de dados obtido jogando foraXi . (Essa estimativa de densidade deve ser feita com alguma suposição, se a dimensão for alta, por exemplo, uma suposição gaussiana para a qual a estimativa de densidade é fácil: média e covariância)
  2. Calcule a probabilidade de para a densidade estimada na etapa 1Xi . chame isso de .Li

fim para

classifique (para i = 1, .., n) e use um procedimento de teste de hipóteses múltiplas para dizer quais não são bons ...Li

Isso funcionará se n for suficientemente grande ... você também pode usar a estratégia "deixar k de fora", que pode ser mais relevante quando você tiver "grupos" de outliers ...


Como isso lidaria com casos em que você não sabe quantos outliers você tem, ou seja, quando os pontos N-1 ainda têm um viés, pois incluem outliers?
Benjamin Bannier

1
se n for suficientemente grande e o número de discrepantes for pequeno, esse viés será insignificante. Se houver um grande número de discrepantes, então, não é discrepante e, de qualquer maneira, como mencionei, você pode usar a estratégia deixar k de fora ... (neste caso, você precisa descobrir uma estratégia para evitar o rastreamento de todas as configurações que possam seja NP difícil ...) e, se você não conhece k, pode tentar muitos valores para ke manter o mais relevante.
Robin girard

1
Essa é uma boa idéia, mas se eu a entendi corretamente, parece ampliar a idéia de "outlier" para incluir qualquer valor em um conjunto de dados que esteja distante dos outros. Por exemplo, no lote {-110 [1] -90, 0, 90 [1] 110} de 43 números inteiros, o procedimento não identifica o 0 (que é a mediana desses números!) Como o único "outlier" "?
whuber

@whuber boa pergunta! sem suposição estrutural, o zero pode ser removido. No entanto, você pode assumir que a distribuição é unimodal e calcular a densidade de acordo. Nesse caso, a suposição estrutural (unimodalidade) ajudará o procedimento a ver zero como um valor "normal". No final, você acha que é normal, porque você tem esse tipo de "suposição estrutural" em sua cabeça :)?
23611 robin girard

3
LiLi

12

Você pode encontrar candidatos a "outliers" entre os pontos de suporte do elipsóide de volume mínimo delimitador. ( Algoritmos eficientes para encontrar esses pontos em dimensões razoavelmente altas, exatamente e aproximadamente, foram inventados em vários artigos na década de 1970 porque esse problema está intimamente relacionado a uma questão no projeto experimental.)


12

A nova abordagem que vi foi pela análise de componentes principais da IT Jolliffe . Você executa um PCA com seus dados (Nota: o PCA pode ser uma ferramenta de exploração de dados bastante útil), mas, em vez de examinar os primeiros Componentes Principais (PCs), você plota os últimos PCs. Esses PCs são os relacionamentos lineares entre suas variáveis ​​com a menor variação possível. Assim, eles detectam relacionamentos multivariados "precisos" ou quase precisos em seus dados.

Um gráfico das pontuações do PC para o último PC mostrará valores discrepantes que não são facilmente detectáveis, analisando individualmente cada variável. Um exemplo é para altura e peso - alguns que têm altura "acima da média" e peso "abaixo da média" seriam detectados pelo último PC de altura e peso (supondo que eles estejam correlacionados positivamente), mesmo que sua altura e peso não fossem " extremo "individualmente (por exemplo, alguém com 180 cm e 60 kg).


11

Não vi ninguém mencionar funções de influência . Vi essa ideia pela primeira vez no livro multivariado de Gnanadesikan .

Em uma dimensão, um discrepante é um valor extremamente grande ou extremamente pequeno. Na análise multivariada, é uma observação removida da maior parte dos dados. Mas que métrica devemos usar para definir extremo para o discrepante? Existem muitas opções. A distância de Mahalanobis é apenas uma. Penso que procurar todos os tipos de discrepâncias é inútil e contraproducente. Gostaria de perguntar por que você se importa com o outlier? Ao estimar uma média, eles podem ter uma grande influência nessa estimativa. Estimadores robustos apresentam baixo peso e acomodam valores discrepantes, mas não os testam formalmente. Agora em regressão, os valores discrepantes - como pontos de alavancagem - podem ter grandes efeitos nos parâmetros de inclinação do modelo. Com dados bivariados, eles podem influenciar indevidamente o coeficiente de correlação estimado e em três ou mais dimensões o coeficiente de correlação múltipla.

As funções de influência foram introduzidas por Hampel como uma ferramenta na estimativa robusta e Mallows escreveu um belo artigo não publicado defendendo seu uso. A função de influência é uma função do ponto em que você está no espaço n-dimensional e do parâmetro. Mede essencialmente a diferença entre a estimativa de parâmetro com o ponto no cálculo e com o ponto deixado de fora. Em vez de se dar ao trabalho de fazer o cálculo das duas estimativas e fazer a diferença, muitas vezes você pode derivar uma fórmula para isso. Em seguida, os contornos da influência constante informam a direção que é extrema em relação à estimativa desse parâmetro e, portanto, informam onde, no espaço n-dimensional, procurar o outlier.

Para mais, você pode ver meu artigo de 1983 no American Journal of Mathematics and Management Sciences intitulado "A função de influência e sua aplicação à validação de dados". Na validação de dados, queríamos procurar discrepâncias que afetassem o uso pretendido dos dados. Meu sentimento é que você deve direcionar sua atenção para valores discrepantes que afetam muito os parâmetros que você está interessado em estimar e não se importa tanto com os outros que não o fazem.


1
+1 Ideia muito boa, especialmente pelo foco consistente no objetivo da análise.
whuber

Uma idéia semelhante é o Consenso de Amostra Aleatória ( RANSAC ).
GeoMatt22


7

Para dimensões moderadas, como 3, então algum tipo de técnica de validação cruzada do kernel, como sugerido em outros lugares, parece razoável e é o melhor que posso apresentar.

Para dimensões mais altas, não tenho certeza de que o problema seja solucionável; aterra bastante diretamente no território da 'maldição da dimensionalidade'. O problema é que as funções de distância tendem a convergir para valores muito grandes muito rapidamente à medida que você aumenta a dimensionalidade, incluindo distâncias derivadas de distribuições. Se você está definindo um outlier como "um ponto com uma função de distância comparativamente grande em relação aos outros", e todas as suas funções de distância estão começando a convergir porque você está em um espaço de alta dimensão, bem, você está com problemas .

Sem algum tipo de suposição distributiva que permita transformá-lo em um problema de classificação probabilística, ou pelo menos alguma rotação que permita separar seu espaço em "dimensões de ruído" e "dimensões informativas", acho que a geometria dos espaços de alta dimensão proibirá qualquer identificação fácil - ou pelo menos robusta - de discrepantes.


O procedimento que eu já dei pode ser aplicado em grande dimensão, como eu disse, usando uma suposição gaussiana. Se a dimensão for realmente grande em relação ao tamanho da amostra (por exemplo, p >> n), você poderá fazer alguma suposição de escassez (suponha que os parâmetros de sua distribuição gaussiana estejam em um espaço dimensional baixo, por exemplo) e use um procedimento de estimativa de limiar para a estimativa dos parâmetros ...
robin girard 22/07

1
Muito perspicaz que maldição da dimensionalidade impede uma solução sem hipóteses de distribuição (a menos que você simplesmente tem quantidades insanas de dados ou a dimensão é pequena)
John Robertson

6

Não sei o que você quer dizer quando diz que não está pensando em um problema de regressão, mas em "dados verdadeiros multivariados". Minha resposta inicial seria calcular a distância de Mahalanobis, uma vez que não requer que você especifique um IV ou DV específico, mas, em sua essência (pelo que entendi), está relacionado a uma estatística de alavancagem.


Sim, eu poderia calcular a distância de Mahalanobis de cada observação a partir da média dos dados. Mas as observações com a maior distância da média não são necessariamente discrepantes multivariados. Pense em um gráfico de dispersão bivariado com alta correlação. Um discrepante pode estar fora da nuvem principal de pontos, mas não muito longe da média.
21810 Rob Robndndman


4

Minha primeira resposta seria que, se você puder fazer uma regressão multivariada nos dados, use os resíduos dessa regressão para identificar valores extremos. (Eu sei que você disse que não é um problema de regressão, então isso pode não ajudá-lo, desculpe!)

Estou copiando parte disso de uma pergunta do Stackoverflow que respondi anteriormente, que tem algum código R de exemplo

Primeiro, criaremos alguns dados e depois os mancharemos com um valor externo;

> testout<-data.frame(X1=rnorm(50,mean=50,sd=10),X2=rnorm(50,mean=5,sd=1.5),Y=rnorm(50,mean=200,sd=25)) 
> #Taint the Data 
> testout$X1[10]<-5 
> testout$X2[10]<-5 
> testout$Y[10]<-530 

> testout 
         X1         X2        Y 
1  44.20043  1.5259458 169.3296 
2  40.46721  5.8437076 200.9038 
3  48.20571  3.8243373 189.4652 
4  60.09808  4.6609190 177.5159 
5  50.23627  2.6193455 210.4360 
6  43.50972  5.8212863 203.8361 
7  44.95626  7.8368405 236.5821 
8  66.14391  3.6828843 171.9624 
9  45.53040  4.8311616 187.0553 
10  5.00000  5.0000000 530.0000 
11 64.71719  6.4007245 164.8052 
12 54.43665  7.8695891 192.8824 
13 45.78278  4.9921489 182.2957 
14 49.59998  4.7716099 146.3090 
<snip> 
48 26.55487  5.8082497 189.7901 
49 45.28317  5.0219647 208.1318 
50 44.84145  3.6252663 251.5620 

Muitas vezes, é mais útil examinar os dados graficamente (seu cérebro é muito melhor em detectar valores extremos do que a matemática)

> #Use Boxplot to Review the Data 
> boxplot(testout$X1, ylab="X1") 
> boxplot(testout$X2, ylab="X2") 
> boxplot(testout$Y, ylab="Y") 

Em seguida, você pode usar estatísticas para calcular valores críticos de corte, aqui usando o Teste de Lund (consulte Lund, RE 1975, "Tabelas para um teste aproximado de outliers em modelos lineares", Technometrics, vol. 17, no. 4, pp. 473 -476. E Prescott, P. 1975, "Um teste aproximado para outliers em modelos lineares", Technometrics, vol. 17, no. 1, pp. 129-132.)

> #Alternative approach using Lund Test 
> lundcrit<-function(a, n, q) { 
+ # Calculates a Critical value for Outlier Test according to Lund 
+ # See Lund, R. E. 1975, "Tables for An Approximate Test for Outliers in Linear Models", Technometrics, vol. 17, no. 4, pp. 473-476. 
+ # and Prescott, P. 1975, "An Approximate Test for Outliers in Linear Models", Technometrics, vol. 17, no. 1, pp. 129-132. 
+ # a = alpha 
+ # n = Number of data elements 
+ # q = Number of independent Variables (including intercept) 
+ F<-qf(c(1-(a/n)),df1=1,df2=n-q-1,lower.tail=TRUE) 
+ crit<-((n-q)*F/(n-q-1+F))^0.5 
+ crit 
+ } 

> testoutlm<-lm(Y~X1+X2,data=testout) 

> testout$fitted<-fitted(testoutlm) 

> testout$residual<-residuals(testoutlm) 

> testout$standardresid<-rstandard(testoutlm) 

> n<-nrow(testout) 

> q<-length(testoutlm$coefficients) 

> crit<-lundcrit(0.1,n,q) 

> testout$Ynew<-ifelse(testout$standardresid>crit,NA,testout$Y) 

> testout 
         X1         X2        Y    newX1   fitted    residual standardresid 
1  44.20043  1.5259458 169.3296 44.20043 209.8467 -40.5171222  -1.009507695 
2  40.46721  5.8437076 200.9038 40.46721 231.9221 -31.0183107  -0.747624895 
3  48.20571  3.8243373 189.4652 48.20571 203.4786 -14.0134646  -0.335955648 
4  60.09808  4.6609190 177.5159 60.09808 169.6108   7.9050960   0.190908291 
5  50.23627  2.6193455 210.4360 50.23627 194.3285  16.1075799   0.391537883 
6  43.50972  5.8212863 203.8361 43.50972 222.6667 -18.8306252  -0.452070155 
7  44.95626  7.8368405 236.5821 44.95626 223.3287  13.2534226   0.326339981 
8  66.14391  3.6828843 171.9624 66.14391 148.8870  23.0754677   0.568829360 
9  45.53040  4.8311616 187.0553 45.53040 214.0832 -27.0279262  -0.646090667 
10  5.00000  5.0000000 530.0000       NA 337.0535 192.9465135   5.714275585 
11 64.71719  6.4007245 164.8052 64.71719 159.9911   4.8141018   0.118618011 
12 54.43665  7.8695891 192.8824 54.43665 194.7454  -1.8630426  -0.046004311 
13 45.78278  4.9921489 182.2957 45.78278 213.7223 -31.4266180  -0.751115595 
14 49.59998  4.7716099 146.3090 49.59998 201.6296 -55.3205552  -1.321042392 
15 45.07720  4.2355525 192.9041 45.07720 213.9655 -21.0613819  -0.504406009 
16 62.27717  7.1518606 186.6482 62.27717 169.2455  17.4027250   0.430262983 
17 48.50446  3.0712422 228.3253 48.50446 200.6938  27.6314695   0.667366651 
18 65.49983  5.4609713 184.8983 65.49983 155.2768  29.6214506   0.726319931 
19 44.38387  4.9305222 213.9378 44.38387 217.7981  -3.8603382  -0.092354925 
20 43.52883  8.3777627 203.5657 43.52883 228.9961 -25.4303732  -0.634725264 
<snip> 
49 45.28317  5.0219647 208.1318 45.28317 215.3075  -7.1756966  -0.171560291 
50 44.84145  3.6252663 251.5620 44.84145 213.1535  38.4084869   0.923804784 
       Ynew 
1  169.3296 
2  200.9038 
3  189.4652 
4  177.5159 
5  210.4360 
6  203.8361 
7  236.5821 
8  171.9624 
9  187.0553 
10       NA 
11 164.8052 
12 192.8824 
13 182.2957 
14 146.3090 
15 192.9041 
16 186.6482 
17 228.3253 
18 184.8983 
19 213.9378 
20 203.5657 
<snip> 
49 208.1318 
50 251.5620 

Obviamente, existem outros testes extremos que não o teste de Lund (Grubbs vem à mente), mas não tenho certeza de quais são mais adequados para dados multivariados.


1
Boxplots univariados são úteis para detectar outliers univariados. Mas eles podem perder completamente discrepantes multivariados. A idéia de regressão é boa se eu tivesse um Y e um monte de variáveis ​​X. Mas como eu disse na pergunta, não há Y, portanto a regressão é inadequada.
21810 Rob Robndndman

@ RobHyndman - pode-se corrigir Y (transformá-lo em uma constante) e tentar modelar uma regressão múltipla sem interceptar . Funciona lindamente na prática. Em essência, isso transforma um problema fundamentalmente não supervisionado, que é uma detecção típica de anomalia, em um problema supervisionado.
Arielf 28/05

@arielf Interessante. Você tem uma referência para isso?
Rob Hyndman

@RobHyndman não é um artigo acadêmico, mas talvez seja melhor, você pode tentar você mesmo. Veja minha página do github em vw-top-errors@ goo.gl/l7SLlB (observe que os exemplos ali têm um Y, mas eu usei a mesma técnica, com muito sucesso também em problemas não supervisionados, corrigindo Y.)
arielf

1

Uma das respostas acima mencionadas nas distâncias de mahalanobis ... talvez mais um passo adiante e calcular intervalos de confiança simultâneos ajudaria a detectar valores extremos!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.