Kemungkinan ekstensi ke plot diagnostik default untuk lm (dalam R dan secara umum)?

11

Saya mulai menggali sedikit ke fungsi plot.lm , fungsi ini memberikan enam plot untuk lm, yaitu:

  1. sebidang residual terhadap nilai yang dipasang
  2. plot Skala-Lokasi sqrt (| residual |) terhadap nilai yang dipasang
  3. plot QQ Normal, plot jarak Cook versus label baris
  4. sebidang residual terhadap leverage
  5. sebidang jarak Cook terhadap leverage / (1 leverage)

Dan saya bertanya-tanya apa ekstensi umum / berguna dari plot saat ini ada untuk model linier, dan bagaimana mereka dapat dilakukan dalam R? (tautan ke artikel paket juga disambut)

Jadi fungsi boxcox (dari {MASS}) adalah contoh plot diagnostik lain yang bermanfaat (dan jawaban seperti itu akan bagus), namun, saya lebih ingin tahu tentang variasi / ekstensi pada plot diagnostik default yang ada untuk lm di R (walaupun secara umum komentar lain tentang topik ini selalu disambut baik).

Berikut adalah beberapa contoh sederhana tentang apa yang saya maksud:

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

Untuk memplot residual vs masing-masing potensi 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

Untuk menambahkan baris 0-1 (bagaimana baris ini disebut dalam bahasa Inggris ?!) ke qqplot jadi untuk melihat seberapa banyak qqline menyimpang darinya

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

Untuk memplot qq-plot menggunakan residual mahasiswa yang eksternal

# 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
sumber
Saya pada dasarnya menanyakan pertanyaan ini untuk objek yang lebih sedikit: stats.stackexchange.com/questions/17785/… dan saya berharap jawaban tambahan akan muncul.
Michael Bishop

Jawaban:

17

Paket carmemiliki cukup banyak fungsi yang berguna untuk plot diagnostik model linier dan linier umum. Dibandingkan dengan plot vanilla R, mereka sering ditingkatkan dengan informasi tambahan. Saya sarankan Anda mencoba example("<function>")fungsi-fungsi berikut untuk melihat seperti apa plotnya. Semua plot dijelaskan secara rinci dalam bab 6 dari Fox & Weisberg. 2011. Sahabat R untuk Regresi Terapan. 2nd ed.

  • residualPlots() plot residu Pearson terhadap setiap prediktor (plot sebaran untuk variabel numerik termasuk kecocokan Lowess, plot box untuk faktor)
  • marginalModelPlots() menampilkan scatterplots dari variabel respons terhadap setiap prediktor numerik, termasuk kecocokan Lowess
  • avPlots() menampilkan plot regresi parsial: untuk setiap prediktor, ini adalah sebar plot a) residu dari regresi variabel respons terhadap semua prediktor lain terhadap b) residu dari regresi prediktor terhadap semua prediktor lainnya
  • qqPlot() untuk plot kuantil-kuantil yang mencakup amplop kepercayaan
  • influenceIndexPlot() menampilkan setiap nilai untuk jarak Cook, nilai topi, nilai p untuk uji outlier, dan residualisasi siswa dalam spike-plot terhadap indeks pengamatan
  • influencePlot()memberikan plot-gelembung residu pelajar terhadap nilai-nilai topi, dengan ukuran gelembung sesuai dengan jarak Cook, juga melihat dfbetaPlots()danleveragePlots()
  • boxCox()λ
  • crPlots() adalah untuk plot komponen + residual, varian di antaranya adalah plot CERES (Menggabungkan Harapan bersyarat dan RESIDUAL), yang disediakan oleh ceresPlots()
  • spreadLevelPlot() adalah untuk menilai varians kesalahan yang tidak konstan dan menampilkan residu mahasiswa yang absolut terhadap nilai yang dipasang
  • scatterplot() memberikan scatterplot yang jauh lebih baik termasuk plot kotak di sepanjang sumbu, elips kepercayaan untuk distribusi bivariat, dan garis prediksi dengan pita kepercayaan
  • scatter3d()didasarkan pada paket rgldan menampilkan 3D-scatterplot interaktif termasuk ellipsoid kepercayaan-kawat dan pesawat prediksi, pastikan untuk menjalankanexample("scatter3d")

Selain itu, lihat bplot()dari paket rmsuntuk pendekatan lain untuk menggambarkan distribusi umum dari tiga variabel.

caracal
sumber
1
(+1) Itu gambaran yang sangat bagus yang akan berguna bagi kita semua!
chl
Caracal - ini adalah daftar yang bagus, terima kasih! Jika itu baik-baik saja oleh Anda, saya mungkin akhirnya memposting ulang ini di blog saya (setelah lebih banyak orang, mungkin, menambahkan komentar mereka)
Tal Galili
@ Talalalili Tentu, itu tidak masalah bagi saya.
caracal
4
Anda dapat melihat beberapa contohnya di sini: statmethods.net/stats/rdiagnostics.html
Michael Bishop
Caracal - terima kasih lagi :) Michael - itu adalah tautan yang bagus. Jika Anda ingin menambahkannya sebagai jawaban (dan mungkin salin rekatkan beberapa plot relevan yang tidak muncul pada jawaban caracal) - Saya dengan senang hati akan memilihnya ...
Tal Galili
7

Jawaban ini fokus pada apa yang tersedia di basis R, daripada paket eksternal, meskipun saya setuju bahwa paket Fox layak untuk diadopsi.

Fungsi influence()(atau pembungkusnya influence.measures()) mengembalikan sebagian besar yang kita perlukan untuk diagnostik model, termasuk statistik yang dinamai. Sebagaimana dinyatakan dalam Model Statistik Chambers dan Hastie dalam S (Wadsworth & Brooks, 1992), dapat digunakan dalam kombinasi untuk summary.lm(). Salah satu contoh yang disediakan dalam apa yang disebut "buku putih" (hal. 130-131) memungkinkan untuk menghitung standar (residual dengan varian yang sama) dan dikelompokkan (residual dengan varian yang berbeda untuk SE), DFBETAS (perubahan dalam koefisien yang diskalakan oleh SE untuk koefisien regresi), DFFIT (perubahan nilai pas ketika pengamatan dijatuhkan), dan DFFITS (sama, dengan varian unit) mengukur tanpa banyak kesulitan.

Berdasarkan contoh Anda, dan mendefinisikan objek berikut:

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)

kita dapat menghitung jumlah di atas sebagai berikut:

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

(Ini Tabel 4.1 , hlm. 131.)

Chambers dan Hastie memberikan kode S / R berikut untuk menghitung 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)
}

Mengapa saya menyebutkan pendekatan itu? Karena, pertama, saya menemukan ini menarik dari perspektif pedagogis (itulah yang saya gunakan ketika mengajar kursus statistik pengantar) karena memungkinkan untuk menggambarkan apa yang dapat dihitung dari output dari model linier yang dipasang pada R (tetapi hal yang sama akan berlaku dengan paket statistik lainnya). Kedua, karena jumlah di atas akan dikembalikan sebagai vektor atau matriks sederhana dalam R, itu juga berarti bahwa kita dapat memilih perangkat grafis yang kita inginkan --- lattice atau ggplot --- untuk menampilkan statistik tersebut, atau menggunakannya untuk meningkatkan yang sudah ada plot (mis., sorot nilai DFFITS dalam sebaran dengan ukuran titik yang bervariasi cex).

chl
sumber
Jawabannya sangat informatif dan bermanfaat. Fokus pada R tidak benar-benar mengurangi nilainya karena Anda mendokumentasikan logika statistik,
DWin