Regressão monotônica robusta em R

8

Eu tenho a seguinte tabela em R

df <- structure(list(x = structure(c(12458, 12633, 12692, 12830, 13369, 
13455, 13458, 13515), class = "Date"), y = c(6080, 6949, 7076, 
7818, 0, 0, 10765, 11153)), .Names = c("x", "y"), row.names = c("1", 
"2", "3", "4", "5", "6", "8", "9"), class = "data.frame")

> df
           x     y
1 2004-02-10  6080
2 2004-08-03  6949
3 2004-10-01  7076
4 2005-02-16  7818
5 2006-08-09     0
6 2006-11-03     0
8 2006-11-06 10765
9 2007-01-02 11153

Posso plotar os pontos e o ajuste linear de Tukey ( linefunção in R) via

plot(data=df,  y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)

que produz:

insira a descrição da imagem aqui

Tudo bem. O gráfico acima mostra os valores de consumo de energia, que devem aumentar apenas, então estou feliz com o ajuste não passando por esses dois pontos (que serão posteriormente sinalizados como outliers).

No entanto, "apenas" remova o último ponto e replique novamente

df <- df[-nrow(df),]
plot(data=df,  y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)

O resultado é completamente diferente.

insira a descrição da imagem aqui

Minha necessidade é ter idealmente o mesmo resultado nos dois cenários acima. R não parece estar pronto para usar a função para regressão monotônica, além da isoregqual, no entanto, é constante por partes.

EDITAR:

Como o @Glen_b apontou, a proporção de tamanho de outliers para amostra é muito grande (~ 28%) para a técnica de regressão usada acima. No entanto, acredito que possa haver outra coisa a considerar. Se eu adicionar os pontos no início da tabela:

df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)

e recalcular novamente, como acima plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values), obtenho o mesmo resultado, com uma proporção de ~ 22%

insira a descrição da imagem aqui

Michele
fonte
Você poderia nos explicar o que você quer dizer com "linha de Tukey"? (Ele usou vários métodos de ajuste de linha resistentes.)
whuber
@ whuber oh eu vejo, desculpe. É o método implementado na função R line. Você pode obter mais detalhes digitando ?lineno console r
Michele
Obrigado, mas receio que isso não seja de todo bom: a ajuda se refere apenas ao livro EDA de Tukey, de 1977 - com o qual estou bastante familiarizado e no qual posso identificar muitos métodos de ajuste de linha - e o código simplesmente chama um C programa. Talvez possamos progredir se você puder explicar mais claramente o que está tentando alcançar. Como você caracterizaria (em geral) a diferença entre seus dois "cenários"? Por que você prefere a primeira solução?
whuber
1
(+1) "Só deve aumentar" é a chave: você está perguntando sobre como executar a regressão monotônica (robusta) . Seria útil enfatizar mais esse ponto em sua pergunta: você obterá melhores respostas.
whuber
1
@ Michele Talvez você possa dar uma olhada no nnlspacote (mínimos quadrados não negativos). Isso deve ajudá-lo com as restrições de positividade, mas não com os outliers.
Matteo Fasiolo 16/01

Respostas:

10

n

Existem alguns disponíveis no R; a rlmfunção em MASS(estimativa-M) deve lidar com esse caso em particular (apresenta alto colapso em relação aos y-outliers), mas não terá robustez a outliers influentes .

A função lqsno mesmo pacote deve lidar com valores discrepantes influentes ou existem vários bons pacotes para regressão robusta no CRAN.

Você pode encontrar a regressão robusta de Fox e Weisberg em R ( pdf ) um recurso útil em vários conceitos de regressão robustos.

Tudo isso é apenas uma regressão linear robusta e está ignorando a restrição de monotonicidade, mas imagino que isso será menos problemático se você resolver o problema de quebra. Se você ainda estiver obtendo uma inclinação negativa após executar uma regressão robusta de alta avaria, mas quiser uma linha que não diminua, defina a linha para ter uma inclinação zero - ou seja, escolha uma estimativa de localização robusta e defina a linha para ser constante lá. (Se você deseja uma regressão robusta não-linear-mas-monotônica, mencione isso especificamente.)


Em resposta à edição:

Você parece ter interpretado meu exemplo da regressão de Theil como um comentário sobre o ponto de ruptura de line. Não era; foi simplesmente o primeiro exemplo de uma linha robusta que veio a mim e quebrou em uma proporção menor de contaminação.

Como o whuber já explicou, não podemos dizer com facilidade qual das várias linhas está sendo usada line. A razão pela qual se linedecompõe depende de qual dos vários estimadores robustos possíveis que Tukey menciona e linepode usar.

n

Observe que eu não estou dizendo que é a linha resistente de três grupos que é implementada line- na verdade, eu acho que não -, mas simplesmente que tudo o que eles implementaram linepode ter um ponto de ruptura, de modo que a linha resultante não possa lidar com 2 pontos ímpares em 8, se estiverem na posição 'certa'.

De fato, a linha que é implementada linepossui algum comportamento bizarro - tão estranho que eu me pergunto se pode ter um bug - se você fizer isso:

 x = y = 1:9 #all points lie on a line with slope 1
 plot(x,y)
 abline(line(x,y),col=2)

Então a linelinha tem a inclinação 1.2:

insira a descrição da imagem aqui

De cabeça para baixo, não me lembro de nenhuma das falas de Tukey tendo esse comportamento.


Adicionado muito mais tarde: relatei esse problema aos desenvolvedores há algum tempo; foram necessários alguns lançamentos antes de ser corrigido, mas agora line(que acabou sendo uma forma da linha de três grupos de Tukey) não tem mais esse bug; agora parece se comportar como seria de esperar em todos os casos que tentei.

Glen_b -Reinstate Monica
fonte
Oi, obrigado por tudo isso. No momento em que a minha necessidade é linear regressão monótona. O ponto de ruptura é muito interessante e eu definitivamente deveria ter considerado. No entanto, você pode comentar o terceiro gráfico que acabei de adicionar? Eu adicionar dois pontos no início que deve trazer a relação para 22%
Michele
a propósito lqsfaz o trabalho! Então, eu aceito sua resposta :-) muito obrigado. Se você ainda pudesse me ajudar a entender o terceiro gráfico, seria ótimo! Cheers
Michele
1
Eu fiz uma edição que espero esclarecer as coisas um pouco. Se eu perdi alguma coisa, me avise.
Glen_b -Reinstala Monica
Muito Obrigado. Eu não sou um estatístico (fácil de dizer), e você foi muito útil! Acho que vou ficar lqspor enquanto. Obrigado novamente
Michele