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 ( line
função in R
) via
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)
que produz:
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.
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 isoreg
qual, 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%
fonte
line
. Você pode obter mais detalhes digitando?line
no console rnnls
pacote (mínimos quadrados não negativos). Isso deve ajudá-lo com as restrições de positividade, mas não com os outliers.Respostas:
Existem alguns disponíveis no R; a
rlm
função emMASS
(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
lqs
no 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 seline
decompõe depende de qual dos vários estimadores robustos possíveis que Tukey menciona eline
pode usar.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 implementaramline
pode 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
line
possui algum comportamento bizarro - tão estranho que eu me pergunto se pode ter um bug - se você fizer isso:Então a
line
linha tem a inclinação 1.2: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.fonte
lqs
faz o trabalho! Então, eu aceito sua resposta :-) muito obrigado. Se você ainda pudesse me ajudar a entender o terceiro gráfico, seria ótimo! Cheerslqs
por enquanto. Obrigado novamente