Regressão linear rápida e robusta para outliers

50

Estou lidando com dados lineares com valores discrepantes, alguns dos quais estão a mais de 5 desvios-padrão da linha de regressão estimada. Estou procurando uma técnica de regressão linear que reduz a influência desses pontos.

Até agora, o que fiz foi estimar a linha de regressão com todos os dados, depois descartar o ponto de dados com resíduos quadrados muito grandes (digamos os 10% superiores) e repetir a regressão sem esses pontos.

Na literatura, existem muitas abordagens possíveis: mínimos quadrados aparados, regressão quantílica, estimadores-m etc. Eu realmente não sei qual abordagem devo tentar, por isso estou procurando sugestões. O importante para mim é que o método escolhido seja rápido, porque a regressão robusta será calculada em cada etapa de uma rotina de otimização. Muito obrigado!

Matteo Fasiolo
fonte
2
Um método que você não mencionou é o uso de e estudantil erros com graus desconhecidos de liberdade. No entanto, isso pode não ser tão rápido quanto você precisa. t
@ Procrastinator: (É fácil imaginar uma configuração de outliers onde) isso não funcionará.
user603
@ user603 Isso é verdade para qualquer método, não existe Panacea;). Eu estava simplesmente apontando outro método. +1 na sua resposta.
3
@ Procrastinator: Concordo que todos os métodos falharão por alguma taxa de contaminação . E 'falha' neste contexto pode ser definida quantitativa e empiricamente. Mas a idéia é ainda favorecer os métodos que falharão apenas em taxas mais altas de contaminação.
user603
4
Como isso está sendo feito repetidamente durante uma rotina de otimização, talvez os dados na regressão estejam (eventualmente) mudando lentamente. Isso sugere um algoritmo adaptado à sua situação: comece com alguma forma de regressão robusta, mas ao executar pequenos passos durante a otimização, basta assumir na próxima etapa que qualquer erro discrepante anterior permanecerá discrepante. Use OLS nos dados e verifique se os outliers presuntivos ainda estão fora de linha. Caso contrário, reinicie com o procedimento robusto, mas, se assim for - o que pode acontecer com frequência -, você economizará bastante computação.
whuber

Respostas:

55

Se seus dados contiverem um único outlier, eles poderão ser encontrados de maneira confiável, usando a abordagem sugerida (sem as iterações). Uma abordagem formal para isso é

Cook, R. Dennis (1979). Observações Influentes em Regressão Linear . Jornal da Associação Estatística Americana (American Statistical Association) 74 (365): 169-174.

Para encontrar mais de um outlier, por muitos anos, o método principal foi a chamada família de abordagem de estimativa - . Esta é uma família bastante ampla de estimadores que inclui o estimador de Huber , a regressão L1 de Koenker, bem como a abordagem proposta pelo Procastinator em seu comentário à sua pergunta. Os estimadores com convexas funções têm a vantagem de que eles têm sobre a mesma complexidade numérica como uma estimativa de regressão regular. A grande desvantagem é que eles só podem encontrar os valores discrepantes com confiabilidade se:M M ρMMMρ

  • a taxa de contaminação da sua amostra é menor que que é o número de variáveis ​​de design, p11+pp
  • ou se os outliers não estiverem fora do espaço de design (Ellis e Morgenthaler (1992)).

Você pode encontrar uma boa implementação das estimativas de regressão ( ) no pacote ( ) . l 1Ml1robustbasequantregR

Se seus dados contiverem mais do que outlier potencialmente também fora do espaço de design, encontrá-los equivale a resolver um problema combinatório (equivalentemente a solução para um estimador com decending / não-convexa função). Mρnp+1Mρ

Nos últimos 20 anos (e especialmente nos últimos 10), um grande corpo de algoritmos de detecção de outlier rápidos e confiáveis ​​foi projetado para resolver aproximadamente esse problema combinatório. Agora eles são amplamente implementados nos pacotes estatísticos mais populares (R, Matlab, SAS, STATA, ...).

No entanto, a complexidade numérica de encontrar discrepantes com essas abordagens é tipicamente da ordem . A maioria dos algoritmos pode ser usada na prática para valores de no meio da adolescência. Normalmente, esses algoritmos são lineares em (o número de observações); portanto, o número de observações não é um problema. Uma grande vantagem é que a maioria desses algoritmos é embaraçosamente paralela. Mais recentemente, muitas abordagens projetadas especificamente para dados de dimensões mais altas foram propostas.p nO(2p)pn

Como você não especificou na sua pergunta, listarei algumas referências para o caso . Aqui estão alguns artigos que explicam isso em mais detalhes nesta série de artigos de revisão:p < 20pp<20

Rousseeuw, PJ e van Zomeren BC (1990). Desmascarando outliers multivariados e pontos de alavancagem . Jornal da Associação Estatística Americana , vol. 85, No. 411, pp. 633-639.

Rousseeuw, PJ e Van Driessen, K. (2006). Computando a regressão LTS para grandes conjuntos de dados . Arquivo de Mineração de Dados e Descoberta de Conhecimento Volume 12 Edição 1, Páginas 29 - 45.

Hubert, M., Rousseeuw, PJ e Van Aelst, S. (2008). Métodos multivariados robustos de alta avaria . Statistical Science , vol. 23, nº 1, 92–119

Ellis SP e Morgenthaler S. (1992). Alavancagem e Repartição na Regressão L1. Jornal da Associação Estatística Americana , vol. 87, n. 417, pp. 143-148

Um livro de referência recente sobre o problema da identificação discrepante é:

Maronna RA, Martin RD e Yohai VJ (2006). Estatística Robusta: Teoria e Métodos . Wiley, Nova Iorque.

Estes (e muitas outras variações destes) métodos são implementados (entre outros) no pacote.robustbase R

user603
fonte
4
Agora essa é uma ótima resposta!
Peter Flom - Restabelece Monica
Muito obrigado user603! No meu problema, e não há discrepantes no espaço de design (porque as variáveis ​​explicativas são simuladas a partir de uma distribuição normal). Então, talvez eu possa tentar com o estimador m? De qualquer forma, todas as outras referências que você me forneceu serão muito úteis quando eu começar a trabalhar em aplicativos mais complexos ( >> 10) do meu algoritmo. pp<10p
Matteo Fasiolo
2
@Jugurtha: Nesse caso (sem discrepâncias no espaço do projeto ), os estimadores são realmente a solução preferida. Considere a função 'lmrob..M..fit' no pacote robustbase, a função 'rlm' no pacote MASS ou a regressão l1 no pacote quantreg. Eu ainda executaria a regressão LTS em alguns casos e compararia os resultados, pois eles podem suportar mais discrepâncias. Eu faria isso apenas para verificar se a taxa de contaminação não é maior do que você suspeita. Mp<10M
usar o seguinte comando
11
"Uma grande vantagem é que a maioria desses algoritmos é embaraçosamente paralela". Eu gosto da redação. ;)
Mateen Ulhaq
11
@ Mateen, bem, é o termo da arte, afinal. :)
JM não é estatístico
19

Para regressão simples (x simples), há algo a ser dito para a linha de Theil-Sen em termos de robustez para valores extremos y e pontos influentes, bem como geralmente boa eficiência (no normal) em comparação com LS para a inclinação. O ponto de ruptura da inclinação é de quase 30%; contanto que a interceptação (existe uma variedade de possíveis interceptações que as pessoas usaram) não tenha uma quebra menor, todo o procedimento lida com uma fração considerável de contaminação muito bem.

Sua velocidade pode parecer ruim - a mediana das pistas parece ser mesmo com uma mediana -, mas me lembro que isso pode ser feito mais rapidamente se a velocidade é realmente um problema ( , acredito)(n2)O(n2)O(n)O(nlogn)

Edit: user603 pediu uma vantagem da regressão Theil sobre a regressão L1. A resposta é a outra coisa que mencionei - pontos influentes:

Theil_vs_L1

A linha vermelha é o ajuste (da função na embalagem). O verde é um ajuste com uma inclinação de Theil. Basta um único erro de digitação no valor x - como digitar 533 em vez de 53 - e esse tipo de coisa pode acontecer. Portanto, o ajuste não é robusto para um único erro de digitação no espaço x.L1rqquantregL1

Glen_b
fonte
de fato, pode ser calculado no tempo . Você poderia elaborar qual vantagem (no único caso x) o estimador TS tem sobre, digamos, regressão? nlognl1
user603
11
@ user603 Veja a edição.
Glen_b
(+1) obrigado pela edição. É importante destacar esse recurso.
user603
11
E qual é a vantagem sobre uma estimativa MM, como lmrob () do pacote R robustbase ou mesmo {não é necessário instalar nada além de 'base R'} rlm (*, ... method = "MM") do pacote MASS? Eles têm um ponto de ruptura total (~ 50%) e provavelmente são ainda mais eficientes no normal.
Martin Mächler 17/05
11
@ MartinMächler Parece que você está argumentando contra uma alegação que não fiz lá. Se você gostaria de colocar uma resposta que também contenha uma comparação de outros estimadores robustos de alto nível, especialmente aqueles que são tão simples de entender para alguém do nível do OP, eu gostaria de lê-lo.
Glen_b
12

Você já viu o RANSAC (Wikipedia) ?

Isso deve ser bom para computar um modelo linear razoável, mesmo quando há muitos valores discrepantes e ruídos, pois é construído com base no pressuposto de que apenas parte dos dados realmente pertencerá ao mecanismo.

Anony-Mousse
fonte
sim mas adicionando uma ponderação re-passo simples produz um estimador (LTS) que é igualmente robusta e de modo muito mais estável e estatisticamente eficiente. Por que não fazer?
usar o seguinte comando
1

Eu achei a regressão de erro penalizado melhor. Você também pode usá-lo iterativamente e reponderar amostras, que não são muito consistentes com a solução. A idéia básica é aumentar seu modelo com erros: onde é o vetor de erro desconhecido. Agora você executa a regressão em . Curiosamente, é claro que você pode usar "laço fundido" para isso quando puder estimar previamente a certeza de suas medições e colocar isso como ponderação em e resolver a nova tarefa ligeiramente diferente l1

y=Ax+e
e
yAxe22+λe1
W=diag(wi)
yAxe22+λWe1

Mais informações podem ser encontradas aqui: http://statweb.stanford.edu/~candes/papers/GrossErrorsSmallErrors.pdf

mojovski
fonte
você já tentou isso no exemplo Glen_b (se você adicionar um segundo outlier ao lado de onde ele colocou o dele) ou eu postei?
user603
@ user603 não, acabei de aplicar isso em casos mais práticos para modelagem 3D a partir de imagens de câmeras. Lá isso ajudou muito. No entanto, uma lição aprendida é: Se você tiver várias possibilidades para eliminar seus valores discrepantes, use-os.
Mojovski 15/09/16