Possibili estensioni ai grafici diagnostici predefiniti per lm (in R e in generale)?


11

Ho iniziato a scavare un po 'nella funzione plot.lm , questa funzione fornisce sei grafici per lm, sono:

  1. un diagramma di residui contro valori adattati
  2. un grafico in scala di posizione di sqrt (| residui |) rispetto ai valori adattati
  3. un diagramma QQ normale, un diagramma delle distanze di Cook rispetto alle etichette delle righe
  4. un complotto di residui contro le leve
  5. un diagramma delle distanze di Cook contro la leva / (1 leva)

E mi chiedo quali altre estensioni comuni / utili dei grafici attuali esistono per i modelli lineari, e come possono essere fatte in R? (anche i link agli articoli dei pacchetti sono i benvenuti)

Quindi la funzione boxcox (da {MASS}) è un esempio di un altro diagramma diagnostico utile (e tale risposta sarebbe ottima), tuttavia, sono più curioso di variazioni / estensioni su grafici diagnostici predefiniti esistenti per lm in R (sebbene generale altre osservazioni sull'argomento sono sempre ben accette).

Ecco alcuni semplici esempi di cosa intendo:

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

Tracciare i residui rispetto a ciascuno dei potenziali 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

Per aggiungere la linea 0-1 (come si chiama questa linea in inglese ?!) al qqplot in modo da vedere quanto la qqline si discosta da esso

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

Tracciare la trama qq usando i residui esternalizzati

# 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

Ho fatto essenzialmente questa domanda per oggetti lmer: stats.stackexchange.com/questions/17785/… e spero che saranno disponibili ulteriori risposte.
Michael Bishop,

Risposte:


17

Il pacchetto carha molte funzioni utili per i grafici diagnostici di modelli lineari e generalizzati. Rispetto ai grafici R vanigliati, sono spesso migliorati con informazioni aggiuntive. Ti consiglio di provare example("<function>")le seguenti funzioni per vedere come appaiono i grafici. Tutte le trame sono descritte in dettaglio nel capitolo 6 di Fox & Weisberg. 2011. Un compagno R alla regressione applicata. 2a ed.

  • residualPlots() traccia i residui di Pearson rispetto a ciascun predittore (grafici a dispersione per variabili numeriche incluso un adattamento Lowess, grafici a scatola per i fattori)
  • marginalModelPlots() visualizza i grafici a dispersione della variabile di risposta rispetto a ciascun predittore numerico, incluso un adattamento Lowess
  • avPlots() visualizza grafici di regressione parziale: per ciascun predittore, si tratta di un diagramma a dispersione di a) i residui della regressione della variabile di risposta su tutti gli altri predittori rispetto a b) i residui della regressione del predittore rispetto a tutti gli altri predittori
  • qqPlot() per un diagramma quantile-quantile che include un inviluppo di confidenza
  • influenceIndexPlot() visualizza ogni valore per la distanza di Cook, il valore del cappello, il valore p per il test anomalo e il residuo studentizzato in un diagramma a spike rispetto all'indice di osservazione
  • influencePlot()fornisce un grafico a bolle dei residui studentizzati rispetto ai valori di cappello, con la dimensione della bolla corrispondente alla distanza di Cook, vedi anche dfbetaPlots()eleveragePlots()
  • boxCox()visualizza un profilo della probabilità logaritmica per il parametro di trasformazione in una trasformazione di potenza Box-Coxλ
  • crPlots() è per i grafici componente + residui, una variante dei quali sono grafici CERES (Combinazione di aspettative condizionali e RESIDUALI), forniti da ceresPlots()
  • spreadLevelPlot() serve per valutare la varianza degli errori non costanti e mostra i residui studentizzati assoluti rispetto ai valori adattati
  • scatterplot() fornisce grafici a dispersione molto migliorati che includono grafici a scatole lungo gli assi, ellissi di confidenza per la distribuzione bivariata e linee di previsione con bande di confidenza
  • scatter3d()si basa sul pacchetto rgle visualizza grafici 3D interattivi tra cui ellissoidi di confidenza a rete metallica e piani di previsione, assicurarsi di eseguireexample("scatter3d")

Inoltre, dai un'occhiata al bplot()pacchetto rmsper un altro approccio per illustrare la distribuzione comune di tre variabili.


1
(+1) Questa è un'ottima panoramica che sarà utile per tutti noi!
chl

Caracal - questa è una grande lista, grazie! Se per te va bene, potrei finire per ripubblicare questo sul mio blog (dopo che più persone, eventualmente, aggiungerebbero i loro commenti)
Tal Galili,

@TalGalili Certo, per me va bene.
Caracal,

4
Puoi vedere alcuni esempi di questi qui: statmethods.net/stats/rdiagnostics.html
Michael Bishop,

Caracal - grazie ancora :) Michael - questo è un buon collegamento. Se desideri aggiungerlo come risposta (e forse copiare incolla alcune delle trame pertinenti che non si sono mostrate sulla risposta caracal) - Sarò lieto di votarlo ...
Tal Galili

7

Questa risposta si concentra su ciò che è disponibile nella base R, piuttosto che in pacchetti esterni, anche se sono d'accordo che vale la pena adottare il pacchetto di Fox.

La funzione influence()(o il suo wrapper influence.measures()) restituisce la maggior parte di ciò di cui abbiamo bisogno per la diagnostica del modello, comprese le statistiche basate su jacknif. Come affermato in Chambers and Hastie's Statistical Models in S (Wadsworth & Brooks, 1992), può essere utilizzato in combinazione con summary.lm(). Uno degli esempi forniti nel cosiddetto "libro bianco" (pagg. 130-131) consente di calcolare i residui standardizzati (residui con uguale varianza) e studentizzati (gli stessi con una stima diversa per SE), DFBETAS (modifica del coefficienti ridimensionati da SE per i coefficienti di regressione), DFFIT (modifica del valore adattato quando l'osservazione viene lasciata cadere) e DFFITS (lo stesso, con varianza unitaria) misurano senza troppe difficoltà.

Basato sul tuo esempio e definizione dei seguenti oggetti:

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)

possiamo calcolare le quantità di cui sopra come segue:

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

(Questa è la Tabella 4.1 , p. 131.)

Chambers e Hastie forniscono il seguente codice S / R per il calcolo di 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)
}

Perché menziono questo approccio? Perché, in primo luogo, trovo che questo sia interessante da una prospettiva pedagogica (è quello che sto usando quando insegno corsi di statistica introduttiva) in quanto consente di illustrare ciò che può essere calcolato dall'output di un modello lineare adattato montato in R (ma lo stesso sarebbe applicare con qualsiasi altro pacchetto statistico). In secondo luogo, poiché le quantità di cui sopra verranno restituite come semplici vettori o matrici in R, ciò significa anche che possiamo scegliere il dispositivo grafico che vogliamo --- reticolo o ggplot --- per visualizzare tali statistiche o usarle per migliorare una esistente grafico (ad esempio, evidenziare i valori DFFITS in un grafico a dispersione variando la dimensione del punto cex).


Risposta molto istruttiva e utile. L'attenzione su R non toglie nulla al suo valore da quando hai documentato la logica statistica,
DWin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.