Possíveis extensões nos gráficos de diagnóstico padrão para lm (em R e em geral)?

11

Comecei a cavar um pouco a função plot.lm , essa função fornece seis gráficos para lm, são eles:

  1. uma plotagem de resíduos contra valores ajustados
  2. uma plotagem Scale-Location de sqrt (| resíduos |) em relação aos valores ajustados
  3. um gráfico QQ normal, um gráfico das distâncias de Cook versus rótulos de linha
  4. uma plotagem de resíduos contra alavancas
  5. um gráfico das distâncias de Cook em relação à alavancagem / (1 alavancagem)

E estou me perguntando que outras extensões comuns / úteis dos gráficos atuais existem para modelos lineares, e como elas podem ser feitas em R? (links para artigos de pacotes também são bem-vindos)

Portanto, a função boxcox (de {MASS}) é um exemplo de outro gráfico de diagnóstico útil (e essa resposta seria ótima); no entanto, estou mais curioso sobre variações / extensões nos gráficos de diagnóstico padrão existentes para lm em R (embora gerais outras observações sobre o tema são sempre bem-vindas).

Aqui estão alguns exemplos simples do que quero dizer:

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

Plotar os resíduos versus cada um dos potenciais 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

Para adicionar a linha 0-1 (como essa linha é chamada em inglês ?!) ao qqplot para ver quanto a qqline se desvia dela

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

Plotar o gráfico qq usando resíduos estudados externamente

# 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
fonte
Fiz essencialmente essa pergunta para objetos lmer: stats.stackexchange.com/questions/17785/… e espero que respostas adicionais sejam fornecidas.
Michael Bishop

Respostas:

17

O pacote carpossui várias funções úteis para gráficos de diagnóstico de modelos lineares e lineares generalizados. Comparado aos gráficos R de baunilha, eles geralmente são aprimorados com informações adicionais. Eu recomendo que você tente example("<function>")as seguintes funções para ver como são os gráficos. Todas as parcelas são descritas em detalhes no capítulo 6 da Fox & Weisberg. 2011. Um companheiro R para regressão aplicada. 2nd ed.

  • residualPlots() plota os resíduos de Pearson em relação a cada preditor (gráficos de dispersão para variáveis ​​numéricas, incluindo um ajuste de Lowess, gráficos de caixa para fatores)
  • marginalModelPlots() exibe gráficos de dispersão da variável de resposta em relação a cada preditor numérico, incluindo um ajuste de Lowess
  • avPlots() exibe gráficos de regressão parcial: para cada preditor, este é um gráfico de dispersão de a) os resíduos da regressão da variável resposta em todos os outros preditores contra b) os resíduos da regressão do preditor em relação a todos os outros preditores
  • qqPlot() para um gráfico quantil-quantil que inclua um envelope de confiança
  • influenceIndexPlot() exibe cada valor para a distância de Cook, o valor do chapéu, o valor de p para o teste externo e o resíduo estudantil em um gráfico de picos em relação ao índice de observação
  • influencePlot()fornece um gráfico de bolhas de resíduos estudantis em relação aos valores de chapéu, com o tamanho da bolha correspondente à distância de Cook, também ver dfbetaPlots()eleveragePlots()
  • boxCox()exibe um perfil da probabilidade de log para o parâmetro de transformação em uma transformação de potência Box-Coxλ
  • crPlots() é para parcelas componentes + residuais, uma variante das quais são parcelas CERES (combinando expectativas condicionais e residuais), fornecidas por ceresPlots()
  • spreadLevelPlot() é para avaliar a variação de erro não constante e exibe resíduos estudantis absolutos em relação aos valores ajustados
  • scatterplot() fornece gráficos de dispersão muito aprimorados, incluindo gráficos de caixas ao longo dos eixos, elipses de confiança para a distribuição bivariada e linhas de previsão com faixas de confiança
  • scatter3d()é baseado no pacote rgle exibe gráficos de dispersão 3D interativos, incluindo elipsóides de confiança de malha de arame e planos de previsão, certifique-se de executarexample("scatter3d")

Além disso, dê uma olhada no bplot()pacote rmspara outra abordagem para ilustrar a distribuição comum de três variáveis.

caracal
fonte
1
(+1) Essa é uma visão geral muito boa que será útil para todos nós!
chl
Caracal - esta é uma ótima lista, obrigado! Se ele é bom por você, eu poderia acabar re-postando isso no meu blog (depois de mais pessoas, possivelmente, adicionar seus comentários)
Tal Galili
@TalGalili Claro, por mim tudo bem.
Caracal
4
Você pode ver exemplos de alguns deles aqui: statmethods.net/stats/rdiagnostics.html
Michael Bishop
Caracal - obrigado novamente :) Michael - esse é um bom link. Se você quiser adicioná-lo como resposta (e talvez copiar e colar alguns dos gráficos relevantes que não apareceram na resposta caracal) - terei prazer em votar ...
Tal Galili
7

Esta resposta se concentra no que está disponível na base R, em vez de nos pacotes externos, embora eu concorde que vale a pena adotar o pacote da Fox.

A função influence()(ou seu invólucro influence.measures()) retorna a maior parte do que precisamos para o diagnóstico do modelo, incluindo estatísticas com jacknifed. Como afirmado em Chambers and Hastie Statistical Models in S (Wadsworth & Brooks, 1992), ele pode ser usado em combinação com summary.lm(). Um dos exemplos fornecidos no chamado "livro branco" (pp. 130-131) permite calcular resíduos padronizados (resíduos com igual variação) e estudados (o mesmo com uma estimativa diferente para SE), DFBETAS (mudança no coeficientes dimensionados pelo SE para os coeficientes de regressão), DFFIT (alteração no valor ajustado quando a observação é interrompida) e DFFITS (o mesmo, com variação unitária) medem sem muita dificuldade.

Com base no seu exemplo e definindo os seguintes objetos:

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)

podemos calcular as quantidades acima da seguinte maneira:

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

(Esta é a Tabela 4.1 , p. 131.)

Chambers e Hastie fornecem o seguinte código S / R para calcular o 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)
}

Por que eu mencionei essa abordagem? Porque, primeiro, acho isso interessante do ponto de vista pedagógico (é o que estou usando ao ministrar cursos introdutórios de estatística), pois permite ilustrar o que pode ser calculado a partir da saída de um modelo linear ajustado ajustado em R (mas o mesmo seria aplicar com qualquer outro pacote estatístico). Segundo, como as quantidades acima serão retornadas como vetores ou matrizes simples em R, isso também significa que podemos escolher o dispositivo gráfico que queremos --- treliça ou ggplot --- para exibir essas estatísticas ou usá-las para aprimorar um conjunto existente. plot (por exemplo, realce os valores DFFITS em um gráfico de dispersão variando o tamanho do ponto cex).

chl
fonte
Resposta muito informativa e útil. O foco em R realmente não diminui o seu valor desde que você documentou a lógica estatística,
Dwin