R kullanarak çoklu regresyonda her bir öngörücü tarafından açıklanan varyansı hesaplayın


14

Modelin bir bütün olarak önemli olduğu ve varyansın yaklaşık% 13'ünü açıkladığı çoklu bir gerileme yaptım. Bununla birlikte, her bir anlamlı yordayıcı tarafından açıklanan varyans miktarını bulmam gerekiyor. R kullanarak bunu nasıl yapabilirim?

Aşağıda bazı örnek veriler ve kodlar verilmiştir:

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 )

İşte gerçek verilerimle çıktı:

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

Bu soru burada cevaplanmıştır , ancak kabul edilen cevap sadece ilişkisiz tahmin edicileri ele alır ve ilişkili tahmin edicileri ele alan ek bir yanıt olsa da, belirli bir çözüm değil, sadece genel bir ipucu sağlar. Tahmincilerim ilişkilendirilirse ne yapacağımı bilmek istiyorum.


2
Burada Jeromy Anglim'in cevabına baktınız mı?
Stat

Evet, bahsettiğim ek yanıt buydu. Daha spesifik ve adım adım bir şey umuyordum. Ben ppcor indirdim ama spcor çıkışı ile ne yapacağından emin değildi. Ayrıca, bunu çekirdek R'de yapmanın bir yolu olup olmadığını merak ediyorum? Özel bir paket gerektirmeyecek kadar yaygın bir görev gibi görünüyor.
baixiwei

İlişkili öngörücüler hakkındaki sorunuzun en kısa cevabı, en azından başka varsayımlar ve yaklaşımlar olmaksızın ayrı ayrı önemlerinin ölçülememesidir. Bunu şu şekilde düşünün: eğer bu basitse, neden kolayca ve kolay erişilebilir değildir, çünkü birçok araştırmacı istediklerini düşünüyor?
Nick Cox

İçine bakarak öneririz relaimpopaketi ve ona eşlik eden kağıt: jstatsoft.org/index.php/jss/article/view/v017i01/v17i01.pdf sık sık "LMG" yöntemini kullanın.
Phil

Yanıtlar:


16

Açıklanan yüzde, girilen sıraya bağlıdır.

Belirli bir sipariş belirtirseniz, bunu önemsiz bir şekilde R olarak hesaplayabilirsiniz (örn. updateVe anovaişlevleri aracılığıyla , aşağıya bakın), ancak farklı bir giriş sırası potansiyel olarak çok farklı cevaplar verecektir.

[Bir olasılık, tüm emirler veya başka bir şey için ortalama olabilir, ancak uygunsuz olur ve özellikle yararlı bir soruyu cevaplamıyor olabilir.]

-

Stat'ün işaret ettiği gibi, tek bir modelle, bir kerede bir değişkenin peşindeyseniz, kareler tablosunun artımlı toplamlarını üretmek için 'anova'yı kullanabilirsiniz. Bu, kodunuzdan sonra gelecektir:

 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        

-

Burada artan varyans açıklanıyor; oranı nasıl elde ederiz?

Oldukça önemsiz, onları 1 bölü kendi toplamlarına bölün. (Açıklanan yüzde varyans için 1'i 100 ile değiştirin.)

Burada anova tablosuna eklenen bir sütun olarak görüntüledim:

 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

-

Birkaç belirli giriş emri almaya karar verirseniz, bunun gibi daha genel bir şey yapabilirsiniz (bu, isterseniz değişken gruplarını aynı anda girmenize veya kaldırmanıza da izin verir):

 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

(Böyle bir yaklaşım, örneğin döngüler ve kullanımı yoluyla da otomatikleştirilebilir get. Gerekirse birden çok siparişte değişken ekleyebilir ve kaldırabilirsiniz)

... ve daha önce olduğu gibi yüzdelere ölçeklendirin.

(Not: Bunların nasıl yapılacağını açıkladığım gerçeği, açıkladığım her şeyin savunucusu olarak görülmemelidir.)


2
@ Glen_b: suç yok, ama bu sorunun cevabı değil. Çıktınızda yok . Ve bu arada, - tanımlanmadan bile sizinki gibi benzer verecektir ! Şerefe. m 0 m 5R2anova(fit)m0m5
Stat

Bu gözden geçirilmiş cevap gerçekten yararlıdır. Sanırım oraya geliyorum. Bir soru: iv5 (son değişken) için açıklanan varyans oranını açıkladığınız şekilde hesaplarsam, bu matematiksel olarak iv5'e uyan ve olmayan modele uygulanan özet tarafından döndürülen R ^ 2 değerlerindeki fark ile aynı mıdır? Aslında aynı değerleri alıyorum ve sadece kavramsal olarak aynı şey olup olmadığını kontrol etmek istedim.
baixiwei

Ve bir soru daha: iki farklı IV'ün her biri için önceki yorumda tarif ettiğim şeyi yapamamın bir nedeni var mı? Bu, değişkenlerin farklı giriş emirlerini içeren ikinci önerilen yönteme eşdeğer olur mu?
baixiwei

baixiwei - evet, bu iki fark aynı olacaktır. Evet, her biri için 'takılmış son' katkı yapabilirsiniz. (Aslında regresyon tablosundaki t-testi size şimdiden en son takılan her bir değişkenin öneminin bir testini verir.)R2summary.lm
Glen_b-Monica'yı

2

Çok doğrusal bir regresyonda belirli bir yordayıcı tarafından açıklanan varyasyon yüzdesinin eğim katsayısının çarpımı ve yordayıcının bağımlı değişkenin takılmış değerleri ile korelasyonu olduğunu kanıtladım (tüm değişkenlerin ortalama sıfır değerine standartlaştırıldığı varsayılarak) ve varyans, genelliği kaybetmeyen). Burada bulabilirsiniz:

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


3
user128460 hoş geldiniz, ancak bu bir Soru ve Yanıt sitesidir, Soru ve Cevap Bağlantısı sitesi değildir.
Robert Long

Pratt skoru bu değil mi?
Brett

2

Tek bir bağımlı değişkenin tüm N bağımsız değişken kombinasyonlarına regresyonları için uygun ölçülere sahip olmak için hier.part kütüphanesini kullanabilirsiniz.

library(hier.part)
env <- D[,2:5]
all.regs(D$dv, env, fam = "gaussian", gof = "Rsqu",
     print.vars = TRUE)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.