Hitung varian yang dijelaskan oleh masing-masing prediktor dalam regresi berganda menggunakan R

13

Saya telah menjalankan regresi berganda di mana model secara keseluruhan signifikan dan menjelaskan sekitar 13% dari varians. Namun, saya perlu menemukan jumlah varians yang dijelaskan oleh masing-masing prediktor signifikan. Bagaimana saya bisa melakukan ini menggunakan R?

Berikut beberapa contoh data dan kode:

D = data.frame(
    dv = c( 0.75, 1.00, 1.00, 0.75, 0.50, 0.75, 1.00, 1.00, 0.75, 0.50 ),
    iv1 = c( 0.75, 1.00, 1.00, 0.75, 0.75, 1.00, 0.50, 0.50, 0.75, 0.25 ),
    iv2 = c( 0.882, 0.867, 0.900, 0.333, 0.875, 0.500, 0.882, 0.875, 0.778, 0.867 ),
    iv3 = c( 1.000, 0.067, 1.000, 0.933, 0.875, 0.500, 0.588, 0.875, 1.000, 0.467 ),
    iv4 = c( 0.889, 1.000, 0.905, 0.938, 0.833, 0.882, 0.444, 0.588, 0.895, 0.812 ),
    iv5 = c( 18, 16, 21, 16, 18, 17, 18, 17, 19, 16 ) )
fit = lm( dv ~ iv1 + iv2 + iv3 + iv4 + iv5, data=D )
summary( fit )

Inilah output dengan data aktual saya:

Call: lm(formula = posttestScore ~ pretestScore + probCategorySame + 
    probDataRelated + practiceAccuracy + practiceNumTrials, data = D)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.6881 -0.1185  0.0516  0.1359  0.3690 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)
 (Intercept)        0.77364    0.10603    7.30  8.5e-13 ***
 iv1                0.29267    0.03091    9.47  < 2e-16 ***
 iv2                0.06354    0.02456    2.59   0.0099 **
 iv3                0.00553    0.02637    0.21   0.8340
 iv4               -0.02642    0.06505   -0.41   0.6847
 iv5               -0.00941    0.00501   -1.88   0.0607 .  
--- Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Residual standard error: 0.18 on 665 degrees of freedom
 Multiple R-squared:  0.13,      Adjusted R-squared:  0.123
 F-statistic: 19.8 on 5 and 665 DF,  p-value: <2e-16

Pertanyaan ini telah dijawab di sini , tetapi jawaban yang diterima hanya membahas prediktor yang tidak berkorelasi, dan sementara ada respons tambahan yang membahas prediktor yang berkorelasi, itu hanya memberikan petunjuk umum, bukan solusi spesifik. Saya ingin tahu apa yang harus dilakukan jika prediktor saya berkorelasi.

Baixiwei
sumber
2
Apakah Anda melihat jawaban oleh Jeromy Anglim di sini ?
Stat
Ya, itulah respons tambahan yang saya maksud. Saya berharap untuk sesuatu yang lebih spesifik dan selangkah demi selangkah. Saya memang mengunduh ppcor tetapi tidak yakin apa yang harus dilakukan dengan output spcor. Juga, saya bertanya-tanya apakah ada cara untuk melakukan ini di inti R? Sepertinya tugas yang cukup umum sehingga tidak memerlukan paket khusus.
Baixiwei
Jawaban terpendek untuk pertanyaan Anda tentang prediktor yang berkorelasi adalah bahwa kepentingannya yang terpisah tidak dapat dikuantifikasi, tanpa setidaknya asumsi dan perkiraan lebih lanjut. Pertimbangkan seperti ini: jika ini mudah, mengapa tidak mudah dan mudah didapat, karena banyak peneliti berpikir mereka menginginkannya?
Nick Cox
Saya sarankan melihat ke dalam relaimpopaket, dan kertas yang menyertainya: jstatsoft.org/index.php/jss/article/view/v017i01/v17i01.pdf Saya sering menggunakan metode "LMG".
Phil

Jawaban:

15

Persentase yang dijelaskan tergantung pada urutan yang dimasukkan.

Jika Anda menentukan urutan tertentu, Anda dapat menghitung ini secara sepele dalam R (misalnya melalui updatedan anovafungsi, lihat di bawah), tetapi urutan entri yang berbeda akan menghasilkan jawaban yang berpotensi sangat berbeda.

[Satu kemungkinan adalah rata-rata untuk semua pesanan atau sesuatu, tetapi itu akan menjadi sulit dan mungkin tidak menjawab pertanyaan yang sangat berguna.]

-

Seperti yang ditunjukkan Stat, dengan model tunggal, jika Anda mencari satu variabel pada satu waktu, Anda bisa menggunakan 'anova' untuk menghasilkan jumlah tabel kuadrat tambahan. Ini akan mengikuti dari kode Anda:

 anova(fit)
Analysis of Variance Table

Response: dv
          Df   Sum Sq  Mean Sq F value Pr(>F)
iv1        1 0.033989 0.033989  0.7762 0.4281
iv2        1 0.022435 0.022435  0.5123 0.5137
iv3        1 0.003048 0.003048  0.0696 0.8050
iv4        1 0.115143 0.115143  2.6294 0.1802
iv5        1 0.000220 0.000220  0.0050 0.9469
Residuals  4 0.175166 0.043791        

-

Jadi di sana kita memiliki varian tambahan yang dijelaskan; bagaimana kita mendapatkan proporsi?

Cukup sepele, skala mereka dengan 1 dibagi dengan jumlah mereka. (Ganti 1 dengan 100 untuk variasi persentase yang dijelaskan.)

Di sini saya telah menampilkannya sebagai kolom tambahan ke tabel anova:

 af <- anova(fit)
 afss <- af$"Sum Sq"
 print(cbind(af,PctExp=afss/sum(afss)*100))
          Df       Sum Sq      Mean Sq    F value    Pr(>F)      PctExp
iv1        1 0.0339887640 0.0339887640 0.77615140 0.4280748  9.71107544
iv2        1 0.0224346357 0.0224346357 0.51230677 0.5137026  6.40989591
iv3        1 0.0030477233 0.0030477233 0.06959637 0.8049589  0.87077807
iv4        1 0.1151432643 0.1151432643 2.62935731 0.1802223 32.89807550
iv5        1 0.0002199726 0.0002199726 0.00502319 0.9468997  0.06284931
Residuals  4 0.1751656402 0.0437914100         NA        NA 50.04732577

-

Jika Anda memutuskan ingin beberapa pesanan masuk tertentu, Anda dapat melakukan sesuatu yang lebih umum seperti ini (yang juga memungkinkan Anda untuk memasukkan atau menghapus grup variabel sekaligus jika Anda mau):

 m5 = fit
 m4 = update(m5, ~ . - iv5)
 m3 = update(m4, ~ . - iv4)
 m2 = update(m3, ~ . - iv3)
 m1 = update(m2, ~ . - iv2)
 m0 = update(m1, ~ . - iv1)

 anova(m0,m1,m2,m3,m4,m5)
Analysis of Variance Table

Model 1: dv ~ 1
Model 2: dv ~ iv1
Model 3: dv ~ iv1 + iv2
Model 4: dv ~ iv1 + iv2 + iv3
Model 5: dv ~ iv1 + iv2 + iv3 + iv4
Model 6: dv ~ iv1 + iv2 + iv3 + iv4 + iv5
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1      9 0.35000                           
2      8 0.31601  1  0.033989 0.7762 0.4281
3      7 0.29358  1  0.022435 0.5123 0.5137
4      6 0.29053  1  0.003048 0.0696 0.8050
5      5 0.17539  1  0.115143 2.6294 0.1802
6      4 0.17517  1  0.000220 0.0050 0.9469

(Pendekatan semacam itu mungkin juga otomatis, misalnya melalui loop dan penggunaan get . Anda dapat menambah dan menghapus variabel dalam beberapa pesanan jika diperlukan)

... dan kemudian skala ke persentase seperti sebelumnya.

(NB. Fakta bahwa saya menjelaskan bagaimana melakukan hal-hal ini tidak harus dianggap sebagai pembelaan dari semua yang saya jelaskan.)

Glen_b -Reinstate Monica
sumber
2
R2anova(fit)m0m5
Jawaban yang direvisi ini sangat berguna. Saya pikir saya akan ke sana. Satu pertanyaan: Jika saya menghitung proporsi varian yang dijelaskan untuk iv5 (variabel terakhir) dengan cara yang Anda jelaskan, apakah ini secara matematis sama dengan perbedaan dalam nilai R ^ 2 yang dikembalikan oleh ringkasan yang diterapkan pada model yang cocok dengan dan tanpa iv5? Saya sebenarnya mendapatkan nilai yang sama dan hanya ingin memeriksa apakah ini secara konseptual adalah hal yang sama.
Baixiwei
Dan satu pertanyaan lagi: apakah ada alasan saya tidak bisa melakukan apa yang saya jelaskan di komentar sebelumnya satu kali untuk masing-masing dari dua iv yang berbeda? Apakah itu setara dengan metode kedua yang Anda usulkan yang melibatkan berbagai urutan memasukkan variabel?
Baixiwei
R2summary.lm
2

Saya membuktikan bahwa persentase variasi yang dijelaskan oleh prediktor yang diberikan dalam regresi linier berganda adalah produk dari koefisien kemiringan dan korelasi prediktor dengan nilai-nilai yang sesuai dari variabel dependen (dengan asumsi bahwa semua variabel telah distandarisasi memiliki rata-rata nol dan varian satu; yang tanpa kehilangan sifat umum). Temukan di sini:

https://www.researchgate.net/publication/306347340_A_Natural_Decomposition_of_R2_in_Multiple_Linear_Regression

pengguna128460
sumber
3
selamat datang user128460, tapi ini adalah situs Tanya Jawab, bukan situs Tanya Jawab.
Robert Long
Bukankah itu skor Pratt?
Brett
2

Anda dapat menggunakan pustaka hier.part untuk memiliki ukuran goodness of fit untuk regresi satu variabel dependen ke semua kombinasi N variabel independen

library(hier.part)
env <- D[,2:5]
all.regs(D$dv, env, fam = "gaussian", gof = "Rsqu",
     print.vars = TRUE)
MFR
sumber