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%
quelle
line
. Sie können mehr Details haben, indem Sie?line
in die r-Konsole eingebennnls
Paket ansehen (nicht negative kleinste Quadrate). Das sollte Ihnen bei den Positivitätsbeschränkungen helfen, aber nicht bei den Ausreißern.Antworten:
Ich stelle fest, dass Sie nach dem Löschen des letzten Punkts nur sieben Werte haben, von denen zwei (28,6%!) Ausreißer sind. Viele robuste Methoden haben keinen so hohen Breakdown-Punkt (z. B. bricht die Theil-Regression genau an diesem Punkt für n = 7 zusammen, obwohl sie bei auf 29,3% steigt), aber wenn Sie einen so hohen Breakdown- Punkt haben müssen, dass Es kann so viele Ausreißer verwalten, dass Sie einen Ansatz wählen müssen, der tatsächlich diesen höheren Ausfallpunkt hat.n
Es sind einige in R verfügbar; die
rlm
Funktion inMASS
(M-Schätzung) soll mit diesem befaßt bestimmten Fall (es hohen Durchbruch gegen y-Ausreißer hat), aber es wird nicht die Robustheit haben einflussreiche Ausreißer.Die Funktion
lqs
im selben Paket sollte sich mit einflussreichen Ausreißern befassen, oder es gibt eine Reihe guter Pakete für eine robuste Regression von CRAN.Möglicherweise finden Sie die robuste Regression von Fox und Weisberg in R ( pdf ) als nützliche Ressource für mehrere robuste Regressionskonzepte.
All dies befasst sich nur mit robuster linearer Regression und ignoriert die Monotonieeinschränkung, aber ich kann mir vorstellen, dass dies weniger problematisch sein wird, wenn Sie das Aufschlüsselungsproblem sortieren. Wenn Sie nach der Durchführung einer robusten Regression mit hoher Aufteilung immer noch eine negative Steigung erhalten, aber eine nicht abnehmende Linie wünschen, würden Sie die Linie auf die Steigung Null setzen - dh eine robuste Standortschätzung auswählen und die Linie dort konstant einstellen. (Wenn Sie eine robuste nichtlineare, aber monotone Regression wünschen, sollten Sie dies ausdrücklich erwähnen.)
Als Antwort auf die Bearbeitung:
Sie scheinen mein Beispiel der Theil-Regression als Kommentar zum Zusammenbruchspunkt von interpretiert zu haben
line
. Es war nicht; Es war einfach das erste Beispiel einer robusten Linie, die zu mir kam und bei einem geringeren Anteil an Verunreinigungen ausfiel.Wie Whuber bereits erklärt hat, können wir nicht leicht sagen, von welcher von mehreren Zeilen verwendet wird
line
. Der Grund, warum dies soline
zusammenbricht, hängt davon ab, welchen von mehreren möglichen robusten Schätzern Tukey erwähnt undline
möglicherweise verwendet.Wenn es sich beispielsweise um die Linie handelt, die "Daten in drei Gruppen aufteilen und für die Steigung die Steigung der Linie verwenden, die die Mediane der äußeren zwei Drittel verbindet" (manchmal auch als dreigruppenresistente Linie oder Median-Median-Linie bezeichnet) ), dann ist sein Durchschlagspunkt asymptotisch 1/6 und sein Verhalten in kleinen Stichproben hängt genau davon ab, wie die Punkte den Gruppen zugeordnet werden, wenn kein Vielfaches von 3 ist.n
Bitte beachten Sie, dass ich nicht sage, dass es sich um die drei gruppenresistente Linie handelt, die in implementiert ist
line
- ich denke, das ist es nicht -, sondern einfach, dass alles, was sie implementiert haben,line
durchaus einen Ausfallpunkt haben kann, mit dem die resultierende Linie nicht umgehen kann 2 ungerade von 8 Punkten, wenn sie sich in der 'richtigen' Position befinden.Tatsächlich hat die Zeile, in der implementiert
line
ist, ein bizarres Verhalten - so seltsam, dass ich mich frage, ob es einen Fehler geben könnte - wenn Sie dies tun:Dann hat die
line
Linie Steigung 1.2:Ich erinnere mich nicht an Tukeys Zeilen, die dieses Verhalten hatten.
Viel später hinzugefügt: Ich habe dieses Problem vor einiger Zeit den Entwicklern gemeldet. Es dauerte ein paar Releases, bis es behoben war, aber jetzt
line
(was sich als eine Form von Tukeys Drei-Gruppen-Linie herausstellte) hat dieser Fehler nicht mehr. es scheint sich jetzt so zu verhalten, wie ich es in allen Fällen, die ich versucht habe, erwarten würde.quelle
lqs
macht den Job! Also akzeptiere ich deine Antwort :-) Vielen Dank. Wenn Sie mir noch beim Verständnis des dritten Diagramms helfen könnten, wäre das großartig! Prostlqs
.