Mögliche Erweiterungen der Standarddiagnoseplots für lm (in R und allgemein)?

11

Ich habe angefangen, ein bisschen in die Funktion plot.lm zu graben . Diese Funktion gibt sechs Diagramme für lm an. Sie sind:

  1. eine Darstellung der Residuen gegen angepasste Werte
  2. ein Scale-Location-Diagramm von sqrt (| Residuen |) gegen angepasste Werte
  3. Ein normales QQ-Diagramm, ein Diagramm der Abstände von Cook gegenüber den Zeilenbeschriftungen
  4. eine Darstellung der Residuen gegen Hebel
  5. eine Darstellung der Abstände von Cook gegen die Hebelwirkung / (1 Hebelwirkung)

Und ich frage mich, welche anderen gängigen / nützlichen Erweiterungen aktueller Diagramme für lineare Modelle existieren und wie sie in R durchgeführt werden können. (Links zu Paketartikeln sind ebenfalls willkommen)

Die Boxcox-Funktion (von {MASS}) ist also ein Beispiel für ein anderes nützliches Diagnose-Diagramm (und eine solche Antwort wäre großartig). Ich bin jedoch neugieriger auf Variationen / Erweiterungen bestehender Standard-Diagnose-Diagramme für lm in R (obwohl allgemein) andere Bemerkungen zum Thema sind immer willkommen).

Hier sind einige einfache Beispiele dafür, was ich meine:

#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)

Darstellung der Residuen gegen jedes der Potentiale 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

Hinzufügen der 0-1-Zeile (wie heißt diese Zeile auf Englisch?!) Zum qqplot, um zu sehen, wie stark die qqline davon abweicht

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

Plotten des qq-Plots mit extern studentisierten Residuen

# 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
quelle
Ich habe im Wesentlichen diese Frage für frühere Objekte gestellt: stats.stackexchange.com/questions/17785/… und ich hoffe, dass weitere Antworten folgen werden.
Michael Bishop

Antworten:

17

Das Paket carbietet eine Reihe nützlicher Funktionen für diagnostische Diagramme linearer und verallgemeinerter linearer Modelle. Im Vergleich zu Vanille-R-Plots werden sie häufig mit zusätzlichen Informationen erweitert. Ich empfehle Ihnen, example("<function>")die folgenden Funktionen auszuprobieren, um zu sehen, wie die Diagramme aussehen. Alle Handlungen sind in Kapitel 6 von Fox & Weisberg ausführlich beschrieben. 2011. Ein Begleiter der angewandten Regression. 2nd ed.

  • residualPlots() Diagramme Pearson-Residuen gegen jeden Prädiktor (Streudiagramme für numerische Variablen, einschließlich einer Lowess-Anpassung, Boxplots für Faktoren)
  • marginalModelPlots() Zeigt Streudiagramme der Antwortvariablen für jeden numerischen Prädiktor an, einschließlich einer Lowess-Anpassung
  • avPlots() zeigt partielle Regressionsdiagramme an: Für jeden Prädiktor ist dies ein Streudiagramm von a) den Residuen aus der Regression der Antwortvariablen bei allen anderen Prädiktoren gegen b) den Residuen aus der Regression des Prädiktors gegen alle anderen Prädiktoren
  • qqPlot() für ein Quantil-Quantil-Diagramm, das eine Konfidenzhüllkurve enthält
  • influenceIndexPlot() Zeigt jeden Wert für Cooks Abstand, Hutwert, p-Wert für Ausreißertest und studentisierten Rest in einem Spike-Plot gegen den Beobachtungsindex an
  • influencePlot()gibt ein Blasendiagramm von studentisierten Residuen gegen Hutwerte an, wobei die Größe der Blase der Entfernung von Cook entspricht, siehe auch dfbetaPlots()undleveragePlots()
  • boxCox()λ
  • crPlots() ist für Komponenten- + Restdiagramme, von denen eine Variante CERES-Diagramme (Kombinieren von bedingten Erwartungen und Rückständen) sind, bereitgestellt von ceresPlots()
  • spreadLevelPlot() dient zur Beurteilung der nicht konstanten Fehlervarianz und zeigt absolute studentisierte Residuen gegen angepasste Werte an
  • scatterplot() bietet stark verbesserte Streudiagramme mit Boxplots entlang der Achsen, Konfidenzellipsen für die bivariate Verteilung und Vorhersagelinien mit Konfidenzbändern
  • scatter3d()basiert auf einem Paket rglund zeigt interaktive 3D-Streudiagramme an, einschließlich Drahtgitter-Vertrauensellipsoiden und Vorhersageebenenexample("scatter3d")

Schauen Sie sich außerdem das bplot()Paket an, rmsum einen weiteren Ansatz zur Veranschaulichung der gemeinsamen Verteilung von drei Variablen zu finden.

Karakal
quelle
1
(+1) Das ist eine sehr gute Übersicht, die für uns alle nützlich sein wird!
Chl
Caracal - das ist eine großartige Liste, danke! Wenn es Ihnen recht ist, werde ich dies möglicherweise erneut in meinem Blog veröffentlichen (nachdem möglicherweise mehr Leute ihre Kommentare hinzugefügt haben)
Tal Galili
@ TalGalili Klar, das ist gut für mich.
Caracal
4
Beispiele für einige davon finden Sie hier: statmethods.net/stats/rdiagnostics.html
Michael Bishop
Caracal - nochmals vielen Dank :) Michael - das ist ein guter Link. Wenn Sie es als Antwort hinzufügen möchten (und vielleicht einige der relevanten Diagramme kopieren und einfügen möchten, die nicht in der Antwort von caracal angezeigt wurden) - Ich werde es gerne abstimmen ...
Tal Galili
7

Diese Antwort konzentriert sich eher auf das, was in Basis R verfügbar ist, als auf externe Pakete, obwohl ich der Meinung bin, dass es sich lohnt, das Paket von Fox zu übernehmen.

Die Funktion influence()(oder ihr Wrapper influence.measures()) gibt das meiste zurück, was wir für die Modelldiagnose benötigen, einschließlich Jacknifed-Statistiken. Wie in Chambers und Hasties statistischen Modellen in S (Wadsworth & Brooks, 1992) angegeben, kann es in Kombination mit verwendet werden summary.lm(). Eines der Beispiele im sogenannten "White Book" (S. 130-131) ermöglicht die Berechnung standardisierter (Residuen mit gleicher Varianz) und studentisierter (gleiche mit einer anderen Schätzung für SE) Residuen, DFBETAS (Änderung in der Koeffizienten, die von der SE für die Regressionskoeffizienten skaliert werden), DFFIT (Änderung des angepassten Werts, wenn die Beobachtung abfällt) und DFFITS (das gleiche, mit Einheitsvarianz) messen ohne große Schwierigkeiten.

Basierend auf Ihrem Beispiel und Definieren der folgenden Objekte:

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)

Wir können die obigen Mengen wie folgt berechnen:

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))

(Dies ist Tabelle 4.1 , S. 131.)

Chambers und Hastie geben den folgenden S / R-Code für die Berechnung von DFBETAS an:

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

Warum erwähne ich diesen Ansatz? Weil ich dies zunächst aus pädagogischer Sicht interessant finde (das verwende ich beim Unterrichten von Einführungskursen in die Statistik), um zu veranschaulichen, was aus der Ausgabe eines in R angepassten angepassten linearen Modells berechnet werden kann (aber dasselbe wäre) mit jedem anderen Statistikpaket anwenden). Zweitens, da die obigen Mengen als einfache Vektoren oder Matrizen in R zurückgegeben werden, bedeutet dies auch, dass wir das gewünschte Grafikgerät auswählen können - Gitter oder ggplot -, um diese Statistiken anzuzeigen, oder sie verwenden können, um eine vorhandene zu verbessern Diagramm (z. B. Hervorheben von DFFITS-Werten in einem Streudiagramm durch Variieren der Punktgröße cex).

chl
quelle
Sehr informative und nützliche Antwort. Der Fokus auf R beeinträchtigt seinen Wert nicht wirklich, da Sie die statistische Logik dokumentiert haben
DWin