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%
line
. Você pode obter mais detalhes digitando ?line
no console r
nnls
pacote (mínimos quadrados não negativos). Isso deve ajudá-lo com as restrições de positividade, mas não com os outliers.