Возможные расширения диагностических участков по умолчанию для lm (в R и в целом)?


11

Я начал немного копаться в функции plot.lm , эта функция дает шесть графиков для lm:

  1. График остатков от установленных значений
  2. График Scale-Location для sqrt (| остатки |) по отношению к подобранным значениям
  3. Нормальный график QQ, график расстояний Кука против меток строк
  4. График остатков против рычагов
  5. график расстояний Кука от плеча / (1 плечо)

И мне интересно, какие другие общие / полезные расширения существующих графиков существуют для линейных моделей, и как они могут быть сделаны в R? (ссылки на статьи пакетов также приветствуются)

Таким образом, функция boxcox (из {MASS}) является примером другого полезного диагностического графика (и такой ответ был бы отличным), однако мне более любопытно узнать о вариациях / расширениях на существующих диагностических графиках по умолчанию для lm в R (хотя в целом другие замечания по теме всегда приветствуются).

Вот несколько простых примеров того, что я имею в виду:

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

Чтобы построить остатки против каждого из потенциальных х

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

Чтобы добавить строку 0-1 (как эта строка называется на английском языке ?!) в qqplot, чтобы увидеть, насколько отклоняется от нее qqline

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

Построить qq-график с использованием внешне изученных остатков

# 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

По сути, я задал этот вопрос для объектов lmer: stats.stackexchange.com/questions/17785/… и я надеюсь, что будут получены дополнительные ответы.
Майкл Бишоп

Ответы:


17

Пакет carимеет достаточно много полезных функций для диагностики графиков линейных и обобщенных линейных моделей. По сравнению с участками vanilla R они часто дополняются дополнительной информацией. Я рекомендую вам попробовать example("<function>")следующие функции, чтобы увидеть, как выглядят графики. Все сюжеты подробно описаны в главе 6 Fox & Weisberg. 2011. Компаньон R в прикладной регрессии. 2-е изд.

  • residualPlots() наносит на карту остатки Пирсона против каждого предиктора (диаграммы рассеяния для числовых переменных, включая подгонку по Малосу, коробочные диаграммы для факторов)
  • marginalModelPlots() отображает диаграммы рассеяния переменной ответа для каждого числового предиктора, включая подгонку по Lowess
  • avPlots() отображает графики частичной регрессии: для каждого предиктора это диаграмма рассеяния а) остатков от регрессии переменной отклика для всех других предикторов по отношению к б) остатков от регрессии предиктора по отношению ко всем остальным предикторам
  • qqPlot() для квантиль-квантиль сюжет, который включает в себя доверительный конверт
  • influenceIndexPlot() отображает каждое значение расстояния Кука, шляпного значения, p-значения для теста выбросов и изученного остатка на графике спайка по индексу наблюдения
  • influencePlot()дает пузырьковый график изученных остатков по отношению к значениям hat, с размером пузырька, соответствующим расстоянию Кука, также см. dfbetaPlots()иleveragePlots()
  • boxCox()λ
  • crPlots() предназначен для компонент + остаточные графики, вариант которых представляет собой графики CERES (объединение условных ожиданий и остатков), предоставленные ceresPlots()
  • spreadLevelPlot() предназначен для оценки непостоянной дисперсии ошибок и отображает абсолютные стедентифицированные остатки в зависимости от установленных значений
  • scatterplot() обеспечивает значительно улучшенные диаграммы рассеяния, включая коробочные диаграммы вдоль осей, эллипсы достоверности для двумерного распределения и линии прогнозирования с доверительными полосами
  • scatter3d()основывается на пакете rglи отображает интерактивные 3D-диаграммы рассеяния, в том числе эллипсоиды доверительной сетки и плоскости прогнозирования, обязательно запуститеexample("scatter3d")

Кроме того, посмотрите bplot()из пакета rmsна другой подход к иллюстрации общего распределения трех переменных.


1
(+1) Это очень хороший обзор, который будет полезен для всех нас!
ЧЛ

Каракал - это отличный список, спасибо! Если вы согласны, я мог бы опубликовать это в своем блоге (после того, как больше людей, возможно, добавят свои комментарии)
Tal Galili

@TalGalili Конечно, я в порядке.
Каракал

4
Вы можете увидеть примеры некоторых из них здесь: statmethods.net/stats/rdiagnostics.html
Майкл Бишоп

Каракал - еще раз спасибо :) Майкл - это хорошая ссылка. Если вы хотите добавить его в качестве ответа (и, возможно, скопировать и вставить некоторые соответствующие сюжеты, которые не отображались в каракал-ответе) - я с удовольствием проголосую за него ...
Таль Галили,

7

Этот ответ сфокусирован на том, что доступно в базе R, а не на внешних пакетах, хотя я согласен, что пакет Fox стоит принять.

Функция influence() (или ее оболочка influence.measures()) возвращает большую часть того, что нам нужно для диагностики модели, включая статистику сглаживания. Как указано в Chambers и Статистические модели Хасти в S (Wadsworth & Brooks, 1992), его можно использовать в сочетании с summary.lm(). Один из примеров, представленных в так называемой «белой книге» (стр. 130-131), позволяет вычислять стандартизированные (остатки с одинаковой дисперсией) и изученные (то же самое с другой оценкой для SE) остатки, DFBETAS (изменение в коэффициенты, масштабируемые SE для коэффициентов регрессии), DFFIT (изменение подобранного значения, когда наблюдение прекращается) и DFFITS (то же самое, с единичной дисперсией) измеряют без особых затруднений.

На основании вашего примера и определения следующих объектов:

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)

мы можем вычислить вышеуказанные величины следующим образом:

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

(Это Таблица 4.1 , стр. 131.)

Чемберс и Хасти дают следующий код S / R для вычисления 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)
}

Почему я упоминаю этот подход? Потому что, во-первых, я считаю, что это интересно с педагогической точки зрения (это то, что я использую при обучении курсам вводной статистики), поскольку оно позволяет проиллюстрировать, что можно вычислить на основе вывода подобранной линейной модели, подогнанной в R (но то же самое применять с любым другим статистическим пакетом). Во-вторых, так как вышеуказанные величины будут возвращаться в виде простых векторов или матриц в R, это также означает, что мы можем выбрать графическое устройство, которое мы хотим - lattice или ggplot - для отображения этой статистики, или использовать их для улучшения существующей график (например, выделите значения DFFITS на диаграмме рассеяния, варьируя размер точки cex).


Очень информативный и полезный ответ. Фокус на R на самом деле не умаляет его значения, так как вы задокументировали статистическую логику,
DWin
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.