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 출력으로 수행 할 작업이 확실하지 않았습니다. 또한 코어 R 에이 작업을 수행 할 수있는 방법이 있는지 궁금합니다. 특별한 패키지가 필요하지 않은 일반적인 작업처럼 보입니다.
baixiwei

상관 예측 변수에 대한 귀하의 질문에 대한 가장 짧은 대답은 최소한 추가 가정과 근사 없이는 별개의 중요성을 정량화 할 수 없다는 것입니다. 이 방법을 고려하십시오. 이것이 간단하다면, 많은 연구자들이 그것을 원한다고 생각하기 때문에 왜 쉽게 이용할 수 없습니까?
Nick Cox

relaimpo패키지와 함께 제공되는 종이를 살펴 보는 것이 좋습니다 . jstatsoft.org/index.php/jss/article/view/v017i01/v17i01.pdf "LMG"방법을 자주 사용합니다.
Phil

답변:


16

설명 된 비율은 입력 한 순서에 따라 다릅니다.

특정 순서를 지정하면 R로 간단하게 계산할 수 있지만 (예 : updateanova함수 를 통해 아래 참조) 입력 순서가 다르면 잠재적으로 매우 다른 답변을 얻을 수 있습니다.

[하나의 가능성은 모든 주문 또는 무엇을 통해 평균을내는 것일 수도 있지만 다루기 어려워서 특히 유용한 질문에 대답하지 못할 수도 있습니다.]

-

Stat이 지적했듯이 단일 모델을 사용하면 한 번에 하나의 변수를 따르는 경우 '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
@ Glen_b : 위법은 없지만 질문에 대한 답변은 아닙니다. 출력에 가 없습니다 . 그리고 - 를 정의하지 않아도 당신과 비슷한 결과를 줄 것입니다 ! 건배. m 0 m 5R2anova(fit)m0m5
통계

이 수정 된 답변은 정말 유용합니다. 나는 거기에 도착하고 있다고 생각한다. 한 가지 질문 : iv5 (마지막 변수)에 대해 설명 된 분산의 비율을 설명 한 방식으로 계산하면 모형에 적용된 요약에 의해 반환 된 R ^ 2 값의 차이와 iv5의 차이가 수학적으로 동일합니까? 사실 동일한 값을 얻고 있으며 개념적으로 동일한 지 확인하고 싶었습니다.
baixiwei

그리고 하나 더 질문 : 두 개의 다른 iv 각각에 대해 이전 주석에서 한 번만 설명한 것을 수행 할 수없는 이유가 있습니까? 다른 순서로 변수를 입력하는 두 번째 제안 방법과 동일합니까?
baixiwei

baixiwei-예, 두 가지 차이점은 동일합니다. 그렇습니다. 각각에 대해 '마지막에 맞는'기여를 할 수 있습니다. (실제로 회귀 분석 표의 t- 검정은 마지막으로 적합 된 각 변수의 유의성에 대한 검정을 제공합니다.)R2summary.lm
Glen_b -Reinstate Monica

2

다중 선형 회귀 분석에서 주어진 예측 변수에 의해 설명 된 변동 백분율이 기울기 계수와 예측 변수와 종속 변수의 적합치의 곱의 곱임을 증명했습니다 (모든 변수가 평균 0을 갖도록 표준화되었다고 가정) 일반성 손실이없는 분산 1). 여기에서 찾으십시오.

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


3
user128460은 환영하지만이 사이트는 질문 및 답변 사이트가 아니라 질문 및 답변 사이트입니다.
Robert Long

프랫 점수 아니야?
Brett

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.