Ich habe die folgende Tabelle in 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
Ich kann die Punkte und die lineare Anpassung ( line
Funktion in R
) eines Tukey über zeichnen
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)
welches produziert:
Alles gut. Das obige Diagramm zeigt die Energieverbrauchswerte, von denen erwartet wird, dass sie nur zunehmen. Daher bin ich zufrieden, dass die Anpassung diese beiden Punkte nicht durchläuft (die anschließend als Ausreißer gekennzeichnet werden).
Entfernen Sie jedoch "nur" den letzten Punkt und wiederholen Sie den Vorgang
df <- df[-nrow(df),]
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)
Das Ergebnis ist völlig anders.
Mein Bedürfnis ist es, in beiden oben genannten Szenarien idealerweise das gleiche Ergebnis zu erzielen. R scheint keine gebrauchsfertige Funktion für die monotone Regression zu haben, isoreg
die jedoch stückweise konstant ist.
BEARBEITEN:
Wie @Glen_b hervorhob, ist das Verhältnis von Ausreißern zu Stichprobengröße für die oben verwendete Regressionstechnik zu groß (~ 28%). Ich glaube jedoch, dass noch etwas zu beachten ist. Wenn ich die Punkte am Anfang der Tabelle hinzufüge:
df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)
und neu berechnen wie oben plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values)
Ich erhalte das gleiche Ergebnis mit einer Ration von ~ 22%
line
. Sie können mehr Details haben, indem Sie ?line
in die r-Konsole eingeben
nnls
Paket ansehen (nicht negative kleinste Quadrate). Das sollte Ihnen bei den Positivitätsbeschränkungen helfen, aber nicht bei den Ausreißern.