คำนวณความแปรปรวนที่อธิบายโดยตัวทำนายแต่ละตัวในการถดถอยหลายครั้งโดยใช้ R


14

ฉันใช้การถดถอยหลายครั้งซึ่งโมเดลโดยรวมมีความสำคัญและอธิบายความแปรปรวนประมาณ 13% อย่างไรก็ตามฉันต้องการค้นหาจำนวนความแปรปรวนที่อธิบายโดยตัวทำนายสำคัญแต่ละตัว ฉันจะทำสิ่งนี้โดยใช้ R ได้อย่างไร

นี่คือตัวอย่างข้อมูลและรหัส:

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 )

นี่คือผลลัพธ์ที่มีข้อมูลจริงของฉัน:

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

คำถามนี้ได้รับการตอบที่นี่แล้ว แต่คำตอบที่ได้รับการยอมรับนั้นจะตอบเฉพาะกับเครื่องทำนายที่ไม่เกี่ยวข้องและในขณะที่มีการตอบสนองเพิ่มเติมที่กล่าวถึงเครื่องทำนายที่มีความสัมพันธ์กัน ฉันต้องการทราบว่าต้องทำอย่างไรหากตัวทำนายของฉันมีความสัมพันธ์กัน


2
คุณดูคำตอบของ Jeromy Anglim ที่นี่ไหม?
สถิติ

ใช่นั่นคือคำตอบเพิ่มเติมที่ฉันอ้างถึง ฉันหวังว่าจะมีบางอย่างที่เฉพาะเจาะจงมากขึ้นและทีละขั้นตอน ฉันดาวน์โหลด ppcor แล้วแต่ไม่แน่ใจว่าจะทำอย่างไรกับเอาต์พุต spcor นอกจากนี้ฉันสงสัยว่ามีวิธีการทำเช่นนี้ใน core R หรือไม่? ดูเหมือนว่าเป็นงานธรรมดาที่ไม่ต้องใช้แพ็คเกจพิเศษ
baixiwei

คำตอบที่สั้นที่สุดสำหรับคำถามของคุณเกี่ยวกับตัวทำนายที่สัมพันธ์กันคือความสำคัญที่แยกกันของพวกเขานั้นไม่สามารถวัดปริมาณได้ พิจารณาด้วยวิธีนี้: ถ้าตรงไปตรงมาทำไมถึงไม่สะดวกและพร้อมใช้งานเพราะนักวิจัยหลายคนคิดว่าพวกเขาต้องการ
Nick Cox

ฉันขอแนะนำให้ดูในrelaimpoแพ็คเกจและเอกสารประกอบ: jstatsoft.org/index.php/jss/article/view/v017i01/v17i01.pdfฉันใช้วิธี "LMG" บ่อยครั้ง
Phil

คำตอบ:


16

ร้อยละที่อธิบายขึ้นอยู่กับคำสั่งซื้อที่ป้อน

หากคุณระบุคำสั่งซื้อเฉพาะคุณสามารถคำนวณสิ่งนี้ได้เล็กน้อยใน R (เช่นผ่านทางupdateและanovaฟังก์ชั่นดูด้านล่าง) แต่ลำดับการป้อนที่แตกต่างกันอาจให้คำตอบที่แตกต่างกันมาก

[ความเป็นไปได้อย่างหนึ่งอาจจะเฉลี่ยทั่วทุกออเดอร์หรืออะไรบางอย่าง แต่มันจะไม่สะดวกและอาจไม่ตอบคำถามที่มีประโยชน์โดยเฉพาะ]

-

ในฐานะที่เป็นสถิติชี้ให้เห็นด้วยรุ่นเดียวถ้าคุณหลังจากตัวแปรหนึ่งครั้งคุณก็สามารถใช้ 'anova' เพื่อสร้างผลรวมของตารางสี่เหลี่ยมที่เพิ่มขึ้น สิ่งนี้จะตามมาจากรหัสของคุณ:

 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        

-

ดังนั้นเราจึงอธิบายความแปรปรวนแบบเพิ่มหน่วย เราจะหาสัดส่วนได้อย่างไร

ค่อนข้างเล็กมากโดยแบ่งพวกมันออกเป็น 1 หารด้วยผลรวมของพวกมัน (แทนที่ 1 ด้วย 100 เพื่ออธิบายความแปรปรวนของเปอร์เซ็นต์)

ที่นี่ฉันได้แสดงมันเป็นคอลัมน์เพิ่มลงในตาราง 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

-

หากคุณตัดสินใจว่าคุณต้องการคำสั่งซื้อที่เฉพาะเจาะจงหลายรายการคุณสามารถทำสิ่งที่กว้างกว่านี้ได้เช่นกัน (ซึ่งช่วยให้คุณสามารถป้อนหรือลบกลุ่มของตัวแปรได้ตลอดเวลาหากต้องการ):

 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

(วิธีการดังกล่าวอาจเป็นไปโดยอัตโนมัติเช่นผ่านลูปและการใช้งานgetคุณสามารถเพิ่มและลบตัวแปรในหลาย ๆ คำสั่งถ้าจำเป็น)

... จากนั้นขยายขนาดเป็นเปอร์เซ็นต์เหมือนก่อน

(NB. ความจริงที่ว่าฉันอธิบายวิธีการทำสิ่งเหล่านี้ไม่ควรจำเป็นต้องเป็นการสนับสนุนทุกสิ่งที่ฉันอธิบาย)


2
R2anova(fit)m0m5

คำตอบที่แก้ไขนี้มีประโยชน์จริงๆ ฉันคิดว่าฉันไปถึงที่นั่น คำถามหนึ่ง: ถ้าฉันคำนวณสัดส่วนของความแปรปรวนที่อธิบายสำหรับ iv5 (ตัวแปรสุดท้าย) ในลักษณะที่คุณอธิบายไว้คณิตศาสตร์นี้เหมือนกับความแตกต่างในค่า R ^ 2 ที่ส่งคืนโดยสรุปที่ใช้กับโมเดลที่เหมาะกับและไม่มี iv5 หรือไม่ ในความเป็นจริงฉันได้รับค่าเดียวกันและต้องการตรวจสอบว่าสิ่งเหล่านี้เป็นแนวคิดเดียวกันหรือไม่
baixiwei

และอีกหนึ่งคำถาม: มีเหตุผลใดที่ฉันไม่สามารถทำสิ่งที่ฉันเพิ่งอธิบายไว้ในความคิดเห็นก่อนหน้านี้หนึ่งครั้งสำหรับแต่ละ iv ที่ต่างกันหรือไม่ นั่นจะเท่ากับวิธีที่คุณเสนอครั้งที่สองที่เกี่ยวข้องกับคำสั่งที่แตกต่างกันของการป้อนตัวแปรหรือไม่?
baixiwei

R2summary.lm

2

ฉันพิสูจน์ว่าร้อยละของความแปรปรวนที่อธิบายโดยตัวทำนายที่กำหนดในการถดถอยเชิงเส้นหลายครั้งเป็นผลคูณของสัมประสิทธิ์ความชันและความสัมพันธ์ของตัวทำนายที่มีค่าติดตั้งของตัวแปรตาม (สมมติว่าตัวแปรทั้งหมดได้มาตรฐานให้มีค่าเฉลี่ยเป็นศูนย์ และความแปรปรวนอย่างใดอย่างหนึ่งซึ่งไม่สูญเสียทั่วไป) ค้นหาได้ที่นี่:

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


3
ยินดีต้อนรับ user128460 แต่นี่เป็นเว็บไซต์คำถามและคำตอบไม่ใช่เว็บไซต์คำถามและลิงก์เพื่อตอบ
Robert Long

นั่นคือคะแนนแพรตต์?
เบร็ท

2

คุณสามารถใช้ไลบรารี hier.part เพื่อให้ได้ขนาดพอดีสำหรับการถดถอยของตัวแปรที่ขึ้นต่อกันเดียวกับชุดค่าผสมทั้งหมดของตัวแปรอิสระ N

library(hier.part)
env <- D[,2:5]
all.regs(D$dv, env, fam = "gaussian", gof = "Rsqu",
     print.vars = TRUE)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.