J'ai le tableau suivant dans 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
Je peux tracer les points et l'ajustement linéaire d'un Tukey ( line
fonction dans R
) via
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)
qui produit:
Tout va bien. Le graphique ci-dessus montre les valeurs de consommation d'énergie, qui ne devraient qu'augmenter, donc je suis satisfait de l'ajustement ne passant pas par ces deux points (qui seront ensuite signalés comme des valeurs aberrantes).
Cependant, "juste" supprimer le dernier point et replacer à nouveau
df <- df[-nrow(df),]
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)
Le résultat est complètement différent.
Mon besoin est d'avoir idéalement le même résultat dans les deux scénarios ci-dessus. R ne semble pas avoir de fonction prête à l'emploi pour la régression monotone, isoreg
qui est d'ailleurs constante par morceaux.
ÉDITER:
Comme l'a souligné @Glen_b, le rapport de taille des valeurs aberrantes sur échantillon est trop élevé (~ 28%) pour la technique de régression utilisée ci-dessus. Cependant, je pense qu'il pourrait y avoir autre chose à considérer. Si j'ajoute les points au début du tableau:
df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)
et recalculer à nouveau comme ci-dessus plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values)
j'obtiens le même résultat, avec une ration de ~ 22%
line
. Vous pouvez avoir plus de détails en tapant ?line
dans la console r
nnls
paquet (moindres carrés non négatifs). Cela devrait vous aider avec les contraintes de positivité, mais pas avec les valeurs aberrantes.