Jak ggplot oblicza przedziały ufności dla regresji?

15

Pakiet kreślarski R ggplot2 ma niesamowitą funkcję o nazwie stat_smooth do kreślenia linii regresji (lub krzywej) z powiązanym pasmem ufności.

Trudno mi jednak dokładnie ustalić, w jaki sposób generowany jest ten przedział ufności, dla każdej linii regresji (lub „metody”). Jak mogę znaleźć te informacje?

static_rtti
źródło
2
Zobacz sekcję „Szczegóły” w swoim linku.
Stéphane Laurent,
1
@ StéphaneLaurent: Przeczytałem tę sekcję, ale nadal mam problemy z połączeniem kropek. Używam metody „rlm” do dopasowania linii, jak obliczany jest przedział ufności (matematycznie, jakie równanie / algorytm?)? Jak mogę znaleźć te informacje?
static_rtti
1
Myślę więc, że powinieneś zadać bardziej precyzyjne pytanie.
Stéphane Laurent,
1
Myślę, że twoje pytanie jest dość precyzyjne ... ale podejrzewam, że nie znajdziesz tutaj odpowiedzi. Możesz mieć więcej szczęścia w grupie ggplot2 google: groups.google.com/forum/?fromgroups#!forum/ggplot2
russellpierce

Odpowiedzi:

22

Z Detailssekcji pomocy

Obliczenia są wykonywane przez (obecnie nieudokumentowaną) funkcję ogólną predykcji pdf i jej metody. W przypadku większości metod granice ufności oblicza się przy użyciu metody predykcji - wyjątki są lessowe, które wykorzystują aproksymację opartą na t, a dla glm, gdzie normalny przedział ufności jest konstruowany na skali łącza, a następnie przekształcany z powrotem na skalę odpowiedzi.

Tak więc predykcja na ogół wywoła funkcjęstats::predict , która z kolei wywoła poprawną predictmetodę dla metody wygładzania. Przydatne są również inne funkcje dotyczące stat_smooth .

Większość funkcji dopasowania modelu będzie miała predictmetodę powiązaną z classmodelem. Zwykle przyjmą newdataobiekt i argument, se.fitktóry wskaże, czy zostaną dopasowane standardowe błędy. (patrz ?predict) w celu uzyskania dalszych informacji.

se
wyświetlać przedział ufności wokół gładki? (PRAWDA domyślnie, zobacz poziom do kontroli

Jest to przekazywane bezpośrednio do metody przewidywanej, aby zwrócić odpowiednie błędy standardowe (zależne od metody)

fullrange
jeśli dopasowanie obejmuje cały zakres wykresu, czy tylko dane

Określa newdatawartości, dla xktórych będą oceniane prognozy

level poziom przedziału ufności do użycia (domyślnie 0,95)

Przekazany bezpośrednio do metody prognozowania, aby przedział ufności mógł zdefiniować odpowiednią wartość krytyczną (np. predict.lmZastosowania qt((1 - level)/2, df)do pomnożenia standardowych błędów przez

n liczba punktów do oceny płynniej przy

Używany w połączeniu z fullrangedo definiowania xwartości w newdataobiekcie.

W ramach połączenia stat_smoothmożesz zdefiniować, seco jest częściowo dopasowane do se.fit(lub se) i zdefiniować intervalargument, jeśli to konieczne. levelpoda poziom przedziału ufności (domyślnie 0,95).

newdataObiekt jest zdefiniowany w przetwórstwie, w zależności od ustawienia fullrangedla sekwencji o długości nw pełnym zakresie działki lub danych.

W twoim przypadku użycie rlmspowoduje użycie tego predict.rlm, co jest zdefiniowane jako

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, ...)
}

Więc wywołuje wewnętrznie predict.lmz odpowiednim skalowaniem qrrozkładu i scaleargumentów.

mnel
źródło
... i predykcja.rlm jest ukryta w MASS ... a wywołanie predykcji pdf przekazuje argumenty model, xseq, se i poziom do predykcji.rlm ... ale skąd te wartości pochodzą? Cóż, myślę, że zależy to od tego, co się stanie, gdy argumenty zostaną przekazane ze stat_smooth do StatSmooth $ new ... który z kolei wywołuje ...
russellpierce
1
Chodzi mi o to, że twoja odpowiedź jest krokiem we właściwym kierunku, ale całkowita odpowiedź na pytanie OP nie jest tak trywialna, jak się wydaje (chociaż można się spodziewać, że kod będzie zachowywał się rozsądnie ... nie jest się pewnym, dopóki nie prześledzimy go w pełni )
russellpierce
2
Oczekuje się, że kod będzie predictdziałał rozsądnie, jeśli metoda została skonfigurowana w standardowy sposób. Zredagowałem swoją odpowiedź, aby rozwiązać problemy poruszone w pierwszym komentarzu.
mnel
@mnel: wielkie dzięki za tę bardzo szczegółową i przydatną odpowiedź!
static_rtti