Extensions possibles des tracés de diagnostic par défaut pour lm (en R et en général)?


11

J'ai commencé à creuser un peu dans la fonction plot.lm , cette fonction donne six tracés pour lm, ce sont:

  1. un tracé des résidus par rapport aux valeurs ajustées
  2. un graphique Scale-Location de sqrt (| résidus |) par rapport aux valeurs ajustées
  3. un tracé QQ normal, un tracé des distances de Cook par rapport aux étiquettes de ligne
  4. un tracé des résidus contre les effets de levier
  5. un tracé des distances de Cook contre l'effet de levier / (1 effet de levier)

Et je me demande quelles autres extensions communes / utiles des tracés actuels existent pour les modèles linéaires, et comment peuvent-elles être faites dans R? (les liens vers les articles des packages sont également les bienvenus)

Donc, la fonction boxcox (de {MASS}) est un exemple d'un autre tracé de diagnostic utile (et une telle réponse serait formidable), cependant, je suis plus curieux de connaître les variations / extensions sur les tracés de diagnostic par défaut existants pour lm dans R (bien que général d'autres remarques sur le sujet sont toujours les bienvenues).

Voici quelques exemples simples de ce que je veux dire:

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

Pour tracer les résidus en fonction de chacun des potentiels 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

Pour ajouter la ligne 0-1 (comment cette ligne est-elle appelée en anglais?!) Au qqplot afin de voir à quel point la qqline s'en écarte

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

Pour tracer le qq-plot en utilisant des résidus externes étudiés

# 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

J'ai essentiellement posé cette question pour les objets lmer: stats.stackexchange.com/questions/17785/… et j'espère que des réponses supplémentaires seront à venir.
Michael Bishop

Réponses:


17

Le package cara beaucoup de fonctions utiles pour les tracés de diagnostic des modèles linéaires et linéaires généralisés. Par rapport aux parcelles R vanilla, elles sont souvent enrichies d'informations supplémentaires. Je vous recommande d'essayer example("<function>")les fonctions suivantes pour voir à quoi ressemblent les tracés. Toutes les parcelles sont décrites en détail dans le chapitre 6 de Fox & Weisberg. 2011. Un compagnon R pour la régression appliquée. 2e éd.

  • residualPlots() trace les résidus de Pearson par rapport à chaque prédicteur (nuages ​​de points pour les variables numériques, y compris un ajustement de Lowess, boîtes à moustaches pour les facteurs)
  • marginalModelPlots() affiche les diagrammes de dispersion de la variable de réponse par rapport à chaque prédicteur numérique, y compris un ajustement de Lowess
  • avPlots() affiche des graphiques de régression partielle: pour chaque prédicteur, il s'agit d'un nuage de points de a) les résidus de la régression de la variable de réponse sur tous les autres prédicteurs contre b) les résidus de la régression du prédicteur contre tous les autres prédicteurs
  • qqPlot() pour un tracé quantile-quantile qui comprend une enveloppe de confiance
  • influenceIndexPlot() affiche chaque valeur pour la distance de Cook, la valeur de chapeau, la valeur de p pour le test aberrant et le résidu studentisé dans un pic-plot par rapport à l'indice d'observation
  • influencePlot()donne un diagramme à bulles des résidus étudiés par rapport aux valeurs de chapeau, avec la taille de la bulle correspondant à la distance de Cook, voir aussi dfbetaPlots()etleveragePlots()
  • boxCox()λ
  • crPlots() concerne les parcelles composant + résiduel, dont une variante sont des parcelles CERES (Combinaison des attentes conditionnelles et des résidus), fournies par ceresPlots()
  • spreadLevelPlot() sert à évaluer la variance d'erreur non constante et affiche les résidus absolus studentisés par rapport aux valeurs ajustées
  • scatterplot() fournit des diagrammes de dispersion améliorés, y compris des diagrammes en boîte le long des axes, des ellipses de confiance pour la distribution bivariée et des lignes de prédiction avec des bandes de confiance
  • scatter3d()est basé sur un package rglet affiche des diagrammes de dispersion 3D interactifs, y compris des ellipsoïdes de confiance en treillis métallique et des plans de prédiction, assurez-vous d'exécuterexample("scatter3d")

De plus, jetez un œil au bplot()package rmspour une autre approche pour illustrer la distribution commune de trois variables.


1
(+1) C'est un très bon aperçu qui nous sera utile à tous!
chl

Caracal - c'est une excellente liste, merci! Si cela vous convient, je pourrais finir par republier cela sur mon blog (après que plus de gens ajouteraient éventuellement leurs commentaires)
Tal Galili

@TalGalili Bien sûr, ça me va.
caracal

4
Vous pouvez voir des exemples de certains d'entre eux ici: statmethods.net/stats/rdiagnostics.html
Michael Bishop

Caracal - merci encore :) Michael - c'est un bon lien. Si vous souhaitez l'ajouter en tant que réponse (et peut-être copier-coller certains des complots pertinents qui ne se sont pas présentés sur la réponse caracal) - Je serai ravi de voter ...
Tal Galili

7

Cette réponse se concentre sur ce qui est disponible dans la base R, plutôt que sur les packages externes, bien que je convienne que le package de Fox vaut la peine d'être adopté.

La fonction influence()(ou son enveloppe influence.measures()) renvoie la plupart de ce dont nous avons besoin pour le diagnostic du modèle, y compris les statistiques jacknifed. Comme indiqué dans Chambers et Hastie's Statistical Models in S (Wadsworth et Brooks, 1992), il peut être utilisé en combinaison avec summary.lm(). L'un des exemples fournis dans le soi-disant "livre blanc" (pp. 130-131) permet de calculer les résidus standardisés (résidus à variance égale) et studentisés (les mêmes avec une estimation différente pour SE), DFBETAS (changement de coefficients mis à l'échelle par le SE pour les coefficients de régression), DFFIT (changement de la valeur ajustée lorsque l'observation est abandonnée) et DFFITS (les mêmes, avec variance unitaire) mesurent sans trop de difficulté.

Basé sur votre exemple et définissant les objets suivants:

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)

nous pouvons calculer les quantités ci-dessus comme suit:

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

(Il s'agit du tableau 4.1 , p. 131.)

Chambers et Hastie donnent le code S / R suivant pour calculer 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)
}

Pourquoi est-ce que je mentionne cette approche? Parce que, tout d'abord, je trouve cela intéressant d'un point de vue pédagogique (c'est ce que j'utilise lorsque j'enseigne des cours de statistiques d'introduction) car cela permet d'illustrer ce qui peut être calculé à partir de la sortie d'un modèle linéaire ajusté ajusté en R (mais la même chose appliquer avec tout autre logiciel statistique). Deuxièmement, comme les quantités ci-dessus seront retournées sous forme de vecteurs ou de matrices simples dans R, cela signifie également que nous pouvons choisir le périphérique graphique que nous voulons --- treillis ou ggplot --- pour afficher ces statistiques, ou les utiliser pour améliorer un existant (par exemple, mettez en surbrillance les valeurs DFFITS dans un nuage de points en faisant varier la taille des points cex).


Réponse très informative et utile. L'accent mis sur R ne diminue pas vraiment sa valeur puisque vous avez documenté la logique statistique,
DWin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.