Robuste monotone Regression in R.

8

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 ( lineFunktion in R) eines Tukey über zeichnen

plot(data=df,  y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)

welches produziert:

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

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, isoregdie 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%

Geben Sie hier die Bildbeschreibung ein

Michele
quelle
Können Sie uns erklären, was Sie mit "Tukey's line" meinen? (Er verwendete verschiedene widerstandsfähige Linienanpassungsmethoden.)
whuber
@whuber oh ich verstehe, sorry. Ist die Methode in der R-Funktion implementiert line. Sie können mehr Details haben, indem Sie ?linein die r-Konsole eingeben
Michele
Danke, aber ich fürchte, das ist überhaupt nicht gut: Die Hilfe bezieht sich lediglich auf Tukeys EDA-Buch von 1977 - mit dem ich ziemlich vertraut bin und in dem ich viele Zeilenanpassungsmethoden identifizieren kann - und der Code ruft einfach ein C auf Programm. Vielleicht könnten wir Fortschritte machen, wenn Sie klarer erklären könnten, was Sie erreichen wollen. Wie würden Sie (im Allgemeinen) den Unterschied zwischen Ihren beiden "Szenarien" charakterisieren? Warum bevorzugen Sie die erste Lösung?
whuber
1
(+1) "Sollte nur zunehmen" ist der Schlüssel: Sie fragen, wie eine (robuste) monotone Regression durchgeführt werden soll. Es wäre hilfreich, diesen Punkt in Ihrer Frage stärker hervorzuheben: Sie erhalten bessere Antworten.
whuber
1
@Michele Vielleicht könntest du dir das nnlsPaket ansehen (nicht negative kleinste Quadrate). Das sollte Ihnen bei den Positivitätsbeschränkungen helfen, aber nicht bei den Ausreißern.
Matteo Fasiolo

Antworten:

10

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 rlmFunktion in MASS(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 lqsim 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 so linezusammenbricht, hängt davon ab, welchen von mehreren möglichen robusten Schätzern Tukey erwähnt und linemö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, linedurchaus 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 lineist, ein bizarres Verhalten - so seltsam, dass ich mich frage, ob es einen Fehler geben könnte - wenn Sie dies tun:

 x = y = 1:9 #all points lie on a line with slope 1
 plot(x,y)
 abline(line(x,y),col=2)

Dann hat die lineLinie Steigung 1.2:

Geben Sie hier die Bildbeschreibung ein

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.

Glen_b -Reinstate Monica
quelle
Hallo danke für all das. Im Moment brauche ich eine lineare monotone Regression. Der Pannenpunkt ist sehr interessant und ich hätte definitiv darüber nachdenken sollen. Können Sie bitte das dritte Diagramm kommentieren, das ich gerade hinzugefügt habe? Ich füge am Anfang zwei Punkte hinzu, die das Verhältnis auf 22% bringen sollten
Michele
übrigens lqsmacht 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! Prost
Michele
1
Ich habe eine Bearbeitung vorgenommen, von der ich hoffe, dass sie die Dinge etwas klarer macht. Wenn ich etwas verpasst habe, lass es mich wissen.
Glen_b -Reinstate Monica
Danke vielmals. Ich bin kein Statistiker (leicht zu sagen) und Sie waren sehr hilfreich! Ich denke, ich bleibe vorerst bei lqs.
Michele