Tính toán phương sai được giải thích bởi mỗi yếu tố dự báo trong hồi quy bội bằng R


13

Tôi đã chạy một hồi quy bội trong đó toàn bộ mô hình là có ý nghĩa và giải thích khoảng 13% phương sai. Tuy nhiên, tôi cần tìm lượng phương sai được giải thích bởi mỗi yếu tố dự đoán quan trọng. Làm thế nào tôi có thể làm điều này bằng cách sử dụng R?

Dưới đây là một số dữ liệu mẫu và mã:

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 )

Đây là đầu ra với dữ liệu thực tế của tôi:

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

Câu hỏi này đã được trả lời ở đây , nhưng câu trả lời được chấp nhận chỉ giải quyết các dự đoán không tương quan, và trong khi có một câu trả lời bổ sung giải quyết các dự đoán tương quan, nó chỉ cung cấp một gợi ý chung, không phải là một giải pháp cụ thể. Tôi muốn biết phải làm gì nếu dự đoán của tôi có tương quan.


2
Bạn đã xem câu trả lời của Jeromy Anglim ở đây chưa?
Stat

Vâng, đó là phản hồi bổ sung mà tôi đã đề cập. Tôi đã hy vọng cho một cái gì đó cụ thể hơn và từng bước một. Tôi đã tải xuống ppcor nhưng không biết phải làm gì với đầu ra spcor. Ngoài ra, tôi tự hỏi liệu có cách nào để làm điều này trong lõi R không? Có vẻ như một nhiệm vụ đủ phổ biến là nó sẽ không yêu cầu một gói đặc biệt.
baixiwei

Câu trả lời ngắn nhất cho câu hỏi của bạn về các yếu tố dự đoán tương quan là tầm quan trọng riêng biệt của chúng không thể được định lượng, mà không có các giả định và các xấp xỉ tiếp theo. Hãy xem xét nó theo cách này: nếu điều này là đơn giản, tại sao nó không dễ dàng và dễ dàng có sẵn, bởi vì nhiều nhà nghiên cứu nghĩ rằng họ muốn nó?
Nick Cox

Tôi sẽ đề nghị xem xét relaimpogói và giấy đi kèm: jstatsoft.org/index.php/jss/article/view/v017i01/v17i01.pdf Tôi thường xuyên sử dụng phương pháp "LMG".
Phil

Câu trả lời:


15

Tỷ lệ phần trăm được giải thích phụ thuộc vào thứ tự nhập vào.

Nếu bạn chỉ định một thứ tự cụ thể, bạn có thể tính toán đơn giản này trong R (ví dụ thông qua các hàm updateanovahàm, xem bên dưới), nhưng một thứ tự nhập khác nhau sẽ mang lại câu trả lời rất khác nhau.

[Một khả năng có thể là trung bình trên tất cả các đơn đặt hàng hoặc một cái gì đó, nhưng nó sẽ trở nên khó sử dụng và có thể không trả lời một câu hỏi đặc biệt hữu ích.]

-

Như Stat chỉ ra, với một mô hình duy nhất, nếu bạn theo sau một biến tại một thời điểm, bạn có thể chỉ cần sử dụng 'anova' để tạo tổng các bảng bình phương tăng dần. Điều này sẽ tiếp theo từ mã của bạn:

 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        

-

Vì vậy, chúng tôi có phương sai gia tăng được giải thích; Làm thế nào để chúng ta có được tỷ lệ?

Khá tầm thường, chia tỷ lệ cho chúng bằng 1 chia cho tổng của chúng. (Thay thế 1 bằng 100 cho phần trăm chênh lệch được giải thích.)

Ở đây tôi đã hiển thị nó dưới dạng một cột được thêm vào bảng 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

-

Nếu bạn quyết định bạn muốn một số đơn đặt hàng cụ thể, bạn có thể làm một cái gì đó tổng quát hơn như thế này (cũng cho phép bạn nhập hoặc xóa các nhóm biến tại một thời điểm nếu bạn muốn):

 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

(Cách tiếp cận như vậy cũng có thể được tự động hóa, ví dụ như thông qua các vòng lặp và việc sử dụng get. Bạn có thể thêm và xóa các biến trong nhiều đơn hàng nếu cần)

... Và sau đó mở rộng theo tỷ lệ phần trăm như trước đây.

(NB. Thực tế là tôi giải thích cách làm những điều này không nhất thiết phải được coi là sự ủng hộ của tất cả mọi thứ tôi giải thích.)


2
m 0R2anova(fit)m0m5

Câu trả lời sửa đổi này thực sự hữu ích. Tôi nghĩ rằng tôi đang đến đó. Một câu hỏi: Nếu tôi tính tỷ lệ phương sai được giải thích cho iv5 (biến cuối cùng) theo cách bạn mô tả, thì về mặt toán học có giống với sự khác biệt về giá trị R ^ 2 được trả về bởi tóm tắt áp dụng cho mô hình phù hợp với và không có iv5 không? Thực tế tôi đang nhận được các giá trị giống nhau và chỉ muốn kiểm tra xem đây có phải là cùng một khái niệm hay không.
baixiwei

Và một câu hỏi nữa: có lý do nào tôi không thể làm những gì tôi vừa mô tả trong bình luận trước một lần cho mỗi hai iv khác nhau không? Điều đó có tương đương với phương pháp đề xuất thứ hai của bạn liên quan đến các thứ tự nhập biến khác nhau không?
baixiwei

R2summary.lm

2

Tôi đã chứng minh rằng tỷ lệ phần trăm biến thiên được giải thích bởi một yếu tố dự báo nhất định trong hồi quy tuyến tính đa biến là sản phẩm của hệ số độ dốc và mối tương quan của yếu tố dự đoán với các giá trị phù hợp của biến phụ thuộc (giả sử rằng tất cả các biến đã được chuẩn hóa có nghĩa là 0 và phương sai một, mà không mất tính tổng quát). Tìm nó ở đây:

https://www.researchgate.net/publication/306347340_A_Natural_Decysis_of_R2_in_Mult Môn_Linear_Regression


3
user128460 hoan nghênh, nhưng đây là trang web Câu hỏi và Trả lời, không phải là trang web Câu hỏi và Liên kết-Trả lời.
Robert Long

Không phải đó là điểm Pratt sao?
Brett

2

Bạn có thể sử dụng thư viện hier.part để có các biện pháp phù hợp cho hồi quy của một biến phụ thuộc duy nhất cho tất cả các kết hợp của N biến độc lập

library(hier.part)
env <- D[,2:5]
all.regs(D$dv, env, fam = "gaussian", gof = "Rsqu",
     print.vars = TRUE)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.