Wie berechnet ggplot Konfidenzintervalle für Regressionen?

15

Das R-Plot-Paket ggplot2 verfügt über eine großartige Funktion namens stat_smooth zum Plotten einer Regressionslinie (oder -kurve ) mit dem zugehörigen Konfidenzband.

Es fällt mir jedoch schwer, genau herauszufinden, wie dieses Konfidenzband für jede Zeit der Regressionsgeraden (oder "Methode") erzeugt wird. Wie finde ich diese Informationen?

static_rtti
quelle
2
Siehe den Abschnitt mit dem Titel "Details" in Ihrem Link.
Stéphane Laurent
1
@ StéphaneLaurent: Ich habe diesen Abschnitt gelesen, aber ich habe immer noch Probleme, die Punkte zu verbinden. Ich benutze die Methode "rlm" zum Anpassen einer Linie. Wie wird das Konfidenzintervall berechnet (mathematisch, welche Gleichung / welcher Algorithmus?)? Wie finde ich diese Informationen?
static_rtti
1
Ich denke, Sie sollten eine genauere Frage stellen.
Stéphane Laurent
1
Ich denke, Ihre Frage ist einigermaßen präzise ... aber ich vermute, Sie werden hier keine Antwort bekommen. Vielleicht haben Sie bei der google group von ggplot2
russellpierce

Antworten:

22

Aus dem DetailsAbschnitt der Hilfe

Die Berechnung erfolgt mit der (derzeit nicht dokumentierten) generischen Funktion predictdf und ihren Methoden. Für die meisten Methoden werden die Konfidenzgrenzen mit der Vorhersagemethode berechnet - die Ausnahmen sind Löss, bei dem eine t-basierte Näherung verwendet wird, und für glm, bei dem das normale Konfidenzintervall auf der Verbindungsskala konstruiert und dann auf die Antwortskala zurücktransformiert wird.

Also ruft predictdf im Allgemeinen auf stats::predict, was wiederum die richtige predictMethode für die Glättungsmethode aufruft . Andere Funktionen, die stat_smooth betreffen, sind ebenfalls nützlich.

Den meisten Modellanpassungsfunktionen ist eine predictMethode classdes Modells zugeordnet. Diese nehmen normalerweise ein newdataObjekt und ein Argument an se.fit, das angibt, ob die Standardfehler angepasst werden. (siehe ?predict) für weitere Details.

se
Konfidenzintervall um glatt anzeigen? (TRUE standardmäßig, siehe zu steuerndes Niveau

Dies wird direkt an die Vorhersagemethode übergeben, um die entsprechenden Standardfehler (methodenabhängig) zurückzugeben.

fullrange
Sollte die Anpassung den gesamten Bereich des Diagramms oder nur die Daten umfassen?

Dies definiert die newdataWerte, xbei denen die Vorhersagen ausgewertet werden

level Zu verwendendes Konfidenzintervall (standardmäßig 0,95)

Wird direkt an die Vorhersagemethode übergeben, damit das Konfidenzintervall den entsprechenden kritischen Wert definieren kann (z. B. predict.lmVerwendung qt((1 - level)/2, df)für die mit zu multiplizierenden Standardfehler)

n Anzahl der zu bewertenden Punkte

Wird in Verbindung mit verwendet fullrange, um die xWerte im newdataObjekt zu definieren .

In einem Aufruf an können stat_smoothSie definieren, sewelches Argument teilweise mit se.fit(oder se) übereinstimmt , und intervalbei Bedarf das Argument definieren . levelGibt den Grad des Konfidenzintervalls an (Standardwert 0,95).

Das newdataObjekt wird innerhalb der Verarbeitung definiert, abhängig von Ihrer Einstellung fullrangezu einer Abfolge von Längen ninnerhalb des gesamten Bereichs des Plots oder der Daten.

In Ihrem Fall rlmwird mit predict.rlm, was definiert ist als

predict.rlm <- function (object, newdata = NULL, scale = NULL, ...)
{
    ## problems with using predict.lm are the scale and
    ## the QR decomp which has been done on down-weighted values.
    object$qr <- qr(sqrt(object$weights) * object$x)
        predict.lm(object, newdata = newdata, scale = object$s, ...)
}

Es ruft also intern predict.lmmit einer entsprechenden Skalierung der qrZerlegung und scaleArgumentation auf.

mnel
quelle
... und predict.rlm ist in MASS versteckt ... und der Aufruf von predictdf übergibt model-, xseq-, se- und level-Argumente an predict.rlm ... aber woher stammen diese Werte? Nun, ich denke, das hängt davon ab, was passiert, wenn Argumente von stat_smooth an StatSmooth $ new übergeben werden ... was dann wiederum aufruft ...
russellpierce
1
Mein Punkt ist, dass Ihre Antwort ein Schritt in die richtige Richtung ist, aber die vollständige Beantwortung der OP-Frage nicht so trivial ist, wie es zunächst scheint (obwohl man erwartet, dass sich der Code vernünftig verhält ... man ist sich nicht sicher, wenn man ihn nicht vollständig verfolgt )
Russellpierce
2
Es ist zu erwarten, dass sich der Code vernünftig verhält, wenn die predictMethode auf standardmäßige Weise eingerichtet wurde. Ich habe meine Antwort bearbeitet, um die in Ihrem ersten Kommentar angesprochenen Probleme zu beheben.
13.
@mnel: vielen dank für diese sehr detaillierte und nützliche antwort!
static_rtti