Можливі розширення діаграмних діаграм за замовчуванням для lm (у R та загалом)?


11

Я почав трохи розкопувати функцію plot.lm , ця функція дає шість ділянок для lm, вони:

  1. графік залишків проти встановлених значень
  2. графік масштабу-розміщення 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)

Накреслити залишки проти кожного з потенційних 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

Щоб додати рядок 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має досить багато корисних функцій для діагностичних графіків лінійних та узагальнених лінійних моделей. Порівняно з ділянками ванілі R вони часто посилюються додатковою інформацією. Рекомендую спробувати example("<function>")наступні функції, щоб побачити, як виглядають сюжети. Усі сюжети докладно описані в главі 6 Fox & Weisberg. 2011. R-супутник прикладної регресії. 2-е вид.

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

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


1
(+1) Це дуже хороший огляд, який буде корисний для всіх нас!
chl

Каракал - це чудовий список, дякую! Якщо ви добре, я можу в кінцевому підсумку повторно розмістити це у своєму блозі (після того, як більшість людей, можливо, додадуть свої коментарі)
Тал Галілі

@TalGalili Звичайно, мені це добре.
каракал

4
Приклади деяких із них можна побачити тут: statmethods.net/stats/rdiagnostics.html
Михайло Єпископ

Каракал - ще раз дякую :) Майкл - це гарне посилання. Якщо ви хочете додати його як відповідь (і, можливо, скопіюйте вставити деякі відповідні сюжети, які не з’явились у каракальній відповіді) - я з радістю проголосую за це ...
Тал Галілі

7

Ця відповідь зосереджується на тому, що доступно в базовій версії R, а не на зовнішніх пакунках, хоча я згоден, що пакет Fox варто прийняти.

Функція influence()(або її обгортка influence.measures()) повертає більшу частину того, що нам потрібно для діагностики моделі, включаючи статистику з прикріпленими кришками. Як зазначено в статистичних моделях Чемберса і Хасті в 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, це також означає, що ми можемо вибрати графічний пристрій, який ми хочемо --- решітка або ggplot --- для відображення цих статистичних даних, або використовувати їх для розширення існуючої Діаграма (наприклад, виділити значення DFFITS у розсипці, змінюючи розмір точки cex).


Дуже інформативна та корисна відповідь. Зосередженість на R насправді не
погіршує
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.