Rを使用して重回帰の各予測子によって説明される分散を計算します


13

モデル全体が重要であり、分散の約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
ここでジェロミー・アングリムの答えを見ましたか?
統計

はい、それは私が言及していた追加の応答でした。もっと具体的で段階的なものを望んでいました。ppcorをダウンロードしましたが、spcorの出力をどうするかわかりませんでした。また、私はコアRでこれを行う方法があるかどうか疑問に思っていますか?特別なパッケージを必要としないほど一般的なタスクのようです。
baixiwei

相関予測子に関する質問への最短の回答は、少なくともさらなる仮定と近似なしでは、それらの個別の重要性を定量化できないということです。このように考えてください:これが簡単な場合、多くの研究者がそれを望んでいると思うので、なぜそれが容易かつ容易に入手できないのですか?
ニックコックス

relaimpoパッケージとそれに付随するペーパーを調べることをお勧めします。jstatsoft.org / index.php / jss / article / view / v017i01 / v17i01.pdf「LMG」メソッドを頻繁に使用します。
フィル

回答:


15

説明される割合は、入力された順序によって異なります。

特定の順序を指定する場合、Rでこれを簡単に計算できます(たとえば、updateおよびanova関数を使用、以下を参照)が、エントリの順序が異なると、潜在的に非常に異なる回答が生成されます。

[1つの可能性は、すべての注文または何かを平均することかもしれませんが、扱いにくくなり、特に有用な質問に答えられない可能性があります。]

-

Statが指摘しているように、単一のモデルで、一度に1つの変数を使用している場合は、「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することもできます。必要に応じて、複数の順序で変数を追加および削除できます)

...そして、前と同じようにパーセンテージにスケーリングします。

(注。これらのことを行う方法を説明しているという事実は、説明するすべてのことを必ずしも支持するものではありません。)


2
R2anova(fit)m0m5

この修正された答えは本当に便利です。私はそこに着いていると思います。1つの質問:iv5について説明した分散の割合(最後の変数)をあなたが説明した方法で計算すると、これはiv5のある場合とない場合に当てはまるモデルに適用されるサマリーによって返されるR ^ 2値の差と数学的に同じですか?私は実際に同じ値を取得しており、これらが概念的に同じものであるかどうかを確認したかっただけです。
baixiwei

そしてもう1つ質問があります。2つの異なるivのそれぞれについて、前のコメントで説明したことを1回実行できなかった理由はありますか?これは、変数の入力順序が異なる2つ目の提案方法と同等ですか?
baixiwei

R2summary.lm

2

多重線形回帰で特定の予測変数によって説明される変動の割合は、勾配係数と予測変数と従属変数の適合値との相関の積であることを証明しました(すべての変数が平均ゼロになるように標準化されていると仮定します)および分散1;これは一般性を失うことなく)。ここで見つけてください:

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


3
user128460は歓迎しますが、これは質疑応答サイトであり、質疑応答サイトではありません。
ロバートロング

プラットの得点ではありませんか?
ブレット

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.