65

これが「質問と回答」の質問にならないことを願っています...ここに行きます:(多重)共線性は、回帰モデルの予測因子間の非常に高い相関を指します。それらを治す方法...まあ、共線性を「治す」必要がない場合もあります。これは、回帰モデル自体には影響せず、個々の予測子の効果の解釈に影響するためです。

共線性を特定する 1 つの方法は、各予測子を従属変数として、他の予測子を独立変数として配置し、R 2を決定することです。R 2 が .9 (または .95) より大きい場合、予測子は冗長であると見なすことができます。これは 1 つの「方法」です。他のアプローチはどうでしょうか。モデルから予測因子を除外したり、b 係数の変化を監視したりするなど、時間がかかるものもありますが、それらは著しく異なるはずです。

もちろん、分析の特定のコンテキスト/目標を常に心に留めておく必要があります...時には、唯一の救済策は研究を繰り返すことですが、現在、(多重)共線性がある場合に冗長な予測因子をスクリーニングするさまざまな方法に興味があります回帰モデルで発生します。

4

5 に答える 5

40

kappa()関数が役立ちます。シミュレートされた例を次に示します。

> set.seed(42)
> x1 <- rnorm(100)
> x2 <- rnorm(100)
> x3 <- x1 + 2*x2 + rnorm(100)*0.0001    # so x3 approx a linear comb. of x1+x2
> mm12 <- model.matrix(~ x1 + x2)        # normal model, two indep. regressors
> mm123 <- model.matrix(~ x1 + x2 + x3)  # bad model with near collinearity
> kappa(mm12)                            # a 'low' kappa is good
[1] 1.166029
> kappa(mm123)                           # a 'high' kappa indicates trouble
[1] 121530.7

そして、3 番目のリグレッサーをますます共線的にすることで、さらに進みます。

> x4 <- x1 + 2*x2 + rnorm(100)*0.000001  # even more collinear
> mm124 <- model.matrix(~ x1 + x2 + x4)
> kappa(mm124)
[1] 13955982
> x5 <- x1 + 2*x2                        # now x5 is linear comb of x1,x2
> mm125 <- model.matrix(~ x1 + x2 + x5)
> kappa(mm125)
[1] 1.067568e+16
> 

これは概算を使用しています。詳細については、を参照help(kappa)してください。

于 2010-06-15T02:58:13.353 に答える
35

ディルクが条件数法について述べたことに付け加えると、経験則は の値ですCN > 30 indicate severe collinearity。条件番号以外の方法には、次のものがあります。

1) 0 (完全な共線性) から 1 (共線性なし) の範囲の共分散行列の行列式

# using Dirk's example
> det(cov(mm12[,-1]))
[1] 0.8856818
> det(cov(mm123[,-1]))
[1] 8.916092e-09

2) 対角行列の行列式が固有値の積であるという事実の使用 => 1 つ以上の小さな固有値の存在は共線性を示します

> eigen(cov(mm12[,-1]))$values
[1] 1.0876357 0.8143184

> eigen(cov(mm123[,-1]))$values
[1] 5.388022e+00 9.862794e-01 1.677819e-09

3) Variance Inflation Factor (VIF) の値。予測子 i の VIF は 1/(1-R_i^2) です。ここで、R_i^2 は残りの予測子に対する予測子 i の回帰からの R^2 です。共線性は、少なくとも 1 つの独立変数の VIF が大きい場合に存在します。経験則: VIF > 10 is of concern. R での実装については、こちらを参照してください。また、共線性を決定するためのR ^ 2の使用は、散布図の視覚的検査と連携する必要があることにもコメントしたいと思います. .

于 2010-06-15T08:23:07.797 に答える
19

Vito Ricci のリファレンス カード「回帰分析のための R 関数」 http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf

診断関数を含む、R の多くの有用な回帰関連関数を簡潔にリストします。特に、多重共線性を評価できるパッケージ のvif関数をリストします。http://en.wikipedia.org/wiki/Variance_inflation_factorcar

多重共線性の考慮は、多くの場合、変数の重要性を評価する問題と密接に関連しています。これが当てはまる場合は、relaimpoパッケージをチェックしてください: http://prof.beuth-hochschule.de/groemping/relaimpo/

于 2010-06-15T09:08:29.503 に答える
9

この本のセクション 9.4: Practical Regression and Anova using R [Faraway 2002]も参照してください。

共線性はいくつかの方法で検出できます。

  1. 予測子の相関行列を調べると、大きなペアワイズ共線性が明らかになります。

  2. 他のすべての予測変数で x_i を回帰すると、R^2_i が得られます。すべての予測子について繰り返します。1 に近い R^2_i は問題を示します — 問題のある線形結合が見つかる可能性があります。

  3. の固有値を調べます。t(X) %*% Xここで、Xはモデル行列を示します。小さな固有値は問題を示します。2 ノルムの条件数は、行列の非ゼロ特異値の最大値と最小値の比として示すことができます ($\kappa = \sqrt{\lambda_1/\lambda_p}$; を参照?kappa)。\kappa >= 30大きいと考えられます。

于 2010-06-15T07:50:52.007 に答える
8

今のところVIFについての言及がないので、私の回答を追加します。Variance Inflation Factor>10 は、通常、予測変数間の深刻な冗長性を示します。VIF は、変数が他の変数と高度に相関していない場合に、変数の係数の分散が増加する係数を示します。

vif()パッケージで利用可能でcars、class(lm) のオブジェクトに適用されます。x1、x2 の vif を返します。. . オブジェクト内の xn lm()。vif > 10 の変数を除外するか、vif > 10 の変数に変換を導入することをお勧めします。

于 2014-07-25T20:50:05.917 に答える