Możliwe rozszerzenia domyślnych wykresów diagnostycznych dla lm (w R i ogólnie)?

11

Zacząłem kopać trochę w funkcję plot.lm , ta funkcja daje sześć wykresów dla lm, są to:

  1. wykres reszt w stosunku do dopasowanych wartości
  2. wykres Skala-Lokalizacja sqrt (| reszty |) względem dopasowanych wartości
  3. normalny wykres QQ, wykres odległości Cooka w porównaniu do etykiet wierszy
  4. wykres reszt w stosunku do dźwigni
  5. wykres odległości Cooka od dźwigni / (1-dźwignia)

Zastanawiam się, jakie inne powszechne / przydatne rozszerzenia bieżących wykresów istnieją dla modeli liniowych i jak można je wykonać w R? (mile widziane są również linki do artykułów z paczek)

Tak więc funkcja boxcox (z {MASY}) jest przykładem innego przydatnego wykresu diagnostycznego (i taka odpowiedź byłaby świetna), jestem jednak bardziej ciekawy wariantów / rozszerzeń istniejących istniejących domyślnych wykresów diagnostycznych dla lm w R (chociaż ogólne inne uwagi na ten temat są zawsze mile widziane).

Oto kilka prostych przykładów tego, co mam na myśli:

#Some example code for all of us to refer to
set.seed(2542)
x1 <- rnorm(100)
x2 <- runif(100, -2,2)
eps <- rnorm(100,0,2)
y <- 1 + 2*x1 + 3*x2 + eps
y[1:4] <- 14 # adding some contaminated points
fit <- lm(y~x1+x2)

#plot(y~x1+x2)
#summary(fit)

Aby wykreślić resztki względem każdego z potencjalnych x

plot(resid(fit)~x1); abline (h = 0)
plot(resid(fit)~x2); abline (h = 0)
# plot(resid(fit)~x1+x2) # you can also use this, but then you wouldn't be able to use the abline on any plot but the last one

Aby dodać linię 0-1 (jak ta linia jest nazywana w języku angielskim ?!) do qqplot, aby zobaczyć, jak bardzo odbiega ona od qqline

plot(fit, which = 2); abline(0,1, col = "green")

Aby wykreślić wykres qq przy użyciu zewnętrznie uczonych reszt

# plot(fit, which = 2); abline(0,1, col = "green") # The next command is just like this one
qqnorm(rstandard(fit), ylim = c(-2.2,4.2)); qqline(rstudent(fit), lty = 2) ;abline(0,1, col = "green")
qqnorm(rstudent(fit), ylim = c(-2.2,4.2)); qqline(rstudent(fit), lty = 2) ;abline(0,1, col = "green")
# We can note how the "bad" points are more extreme when using the rstudent
Tal Galili
źródło
Zasadniczo zadałem to pytanie dla mniejszych obiektów: stats.stackexchange.com/questions/17785/... i mam nadzieję, że pojawią się dodatkowe odpowiedzi.
Michael Bishop,

Odpowiedzi:

17

Pakiet carma całkiem sporo przydatnych funkcji do wykresów diagnostycznych liniowych i uogólnionych modeli liniowych. W porównaniu do wykresów R waniliowych są one często wzbogacane o dodatkowe informacje. Polecam wypróbować example("<function>")następujące funkcje, aby zobaczyć, jak wyglądają wykresy. Wszystkie wykresy zostały szczegółowo opisane w rozdziale 6 Fox & Weisberg. 2011. Dodatek R do regresji stosowanej. 2nd ed.

  • residualPlots() wykreśla reszty Pearsona dla każdego predyktora (wykresy rozrzutu dla zmiennych numerycznych, w tym dopasowanie Lowessa, wykresy dla czynników)
  • marginalModelPlots() wyświetla wykresy rozrzutu zmiennej odpowiedzi dla każdego predyktora numerycznego, w tym dopasowanie Lowess
  • avPlots() wyświetla wykresy częściowej regresji: dla każdego predyktora jest to wykres rozrzutu a) reszt z regresji zmiennej odpowiedzi na wszystkich innych predyktorach przeciwko b) reszt z regresji predyktora względem wszystkich innych predyktorów
  • qqPlot() dla wykresu kwantylowo-kwantylowego, który zawiera obwiednię ufności
  • influenceIndexPlot() wyświetla każdą wartość dla odległości Cooka, wartości kapelusza, wartości p dla testu odstającego, i resztę uczniowską na wykresie szczytowym względem indeksu obserwacji
  • influencePlot()daje wykres bąbelkowy studenckich reszt względem wartości kapelusza, przy czym rozmiar bąbla odpowiada odległości Cooka, zobacz także dfbetaPlots()ileveragePlots()
  • boxCox()wyświetla profil logarytmu prawdopodobieństwa parametru transformacji w transformatorze mocy Box-Coxaλ
  • crPlots() dotyczy wykresów składowych i rezydualnych, których wariantem są wykresy CERES (Łączenie oczekiwań warunkowych i RES reszt), dostarczone przez ceresPlots()
  • spreadLevelPlot() służy do oceny niestałej wariancji błędu i wyświetla bezwzględne studentizowane resztki względem dopasowanych wartości
  • scatterplot() zapewnia znacznie ulepszone wykresy rozrzutu, w tym wykresy ramkowe wzdłuż osi, elipsy pewności dla rozkładu dwuwariantowego i linie prognozy z pasmami pewności
  • scatter3d()jest oparty na pakiecie rgli wyświetla interaktywne wykresy rozproszenia 3D, w tym elipsoidy zaufania siatki drucianej i płaszczyzny predykcyjne, koniecznie uruchomexample("scatter3d")

Ponadto, spójrz bplot()z pakietu rmsna inne podejście do zilustrowania wspólnego rozkładu trzech zmiennych.

karakal
źródło
1
(+1) To bardzo dobry przegląd, który będzie przydatny dla nas wszystkich!
chl.
Caracal - to świetna lista, dziękuję! Jeśli jest to dla ciebie w porządku, mogę w końcu ponownie opublikować to na moim blogu (po tym, jak więcej osób może dodać swoje komentarze)
Tal Galili
@TalGalili Jasne, w porządku dla mnie.
caracal
4
Możesz zobaczyć przykłady niektórych z nich tutaj: statmethods.net/stats/rdiagnostics.html
Michael Bishop
Caracal - jeszcze raz dziękuję :) Michael - to dobry link. Jeśli chcesz dodać to jako odpowiedź (i może skopiuj wklej niektóre odpowiednie wątki, które nie pojawiły się w odpowiedzi na karakal) - chętnie zagłosuję ...
Tal Galili
7

Ta odpowiedź skupia się na tym, co jest dostępne w bazie R, a nie na pakietach zewnętrznych, chociaż zgadzam się, że pakiet Foxa jest wart przyjęcia.

Funkcja influence()(lub jej opakowanie influence.measures()) zwraca większość tego, czego potrzebujemy do diagnostyki modelu, w tym statystyki typu jacknifed. Jak stwierdzono w Chambers and Hastie's Models Models w S (Wadsworth i Brooks, 1992), można go stosować w połączeniu z summary.lm(). Jeden z przykładów podanych w tak zwanej „białej księdze” (str. 130–131) pozwala obliczyć resztki standaryzowane (reszty z jednakową wariancją) i uczone (to samo z innym oszacowaniem dla SE), DFBETAS (zmiana w współczynniki skalowane przez SE dla współczynników regresji), DFFIT (zmiana dopasowanej wartości po opuszczeniu obserwacji) i DFFITS (to samo, z wariancją jednostkową) mierzą bez większych trudności.

Na podstawie Twojego przykładu i zdefiniowania następujących obiektów:

lms <- summary(fit)
lmi <- influence(fit)
e <- residuals(fit)
s <- lms$sigma
xxi <- diag(lms$cov.unscaled)
si <- lmi$sigma
h <- lmi$hat
bi <- coef(fit) - coef(lmi)

powyższe ilości możemy obliczyć w następujący sposób:

std. residuals    e / (s * (1-h)^.5
stud. residuals   e / (si * (1-h)^.5
dfbetas           bi / (si %o% xxi^.5 
dffit             h * e / (1-h)
dffits            h^.5 * e / (si * (1-h))

(To jest Tabela 4.1 , s. 131.)

Chambers i Hastie podają następujący kod S / R do obliczania DFBETAS:

dfbetas <- function(fit, lms = summary(fit), lmi = lm.influence(fit)) {
  xxi <- diag(lms$cov.unscaled)
  si <- lmi$sigma
  bi <- coef(fit) - coef(lmi)
  bi / (si %o% xxi^0.5)
}

Dlaczego wspominam o tym podejściu? Ponieważ po pierwsze uważam, że jest to interesujące z pedagogicznego punktu widzenia (tego właśnie używam podczas nauczania kursów statystyki wprowadzającej), ponieważ pozwala zilustrować, co można obliczyć z wyników dopasowanego modelu liniowego dopasowanego w R (ale to samo stosuje się z każdym innym pakietem statystycznym). Po drugie, ponieważ powyższe wielkości zostaną zwrócone jako proste wektory lub macierze w R, oznacza to również, że możemy wybrać urządzenie graficzne, które chcemy --- sieć lub ggplot --- do wyświetlenia tych statystyk lub użyć ich do ulepszenia istniejącego wykres (np. podświetl wartości DFFITS na wykresie rozrzutu, zmieniając rozmiar punktu cex).

chl
źródło
Bardzo pouczająca i przydatna odpowiedź. Koncentracja na R tak naprawdę nie umniejsza jego wartości, ponieważ udokumentowałeś logikę statystyczną,
DW