統計モデルにおける多重共線性の捕捉 質問する

統計モデルにおける多重共線性の捕捉 質問する

統計モデルでモデルを当てはめるとします

mod = smf.ols('dependent ~ first_category + second_category + other', data=df).fit()

そうすると、mod.summary()次のような画面が表示されます。

Warnings:
[1] The condition number is large, 1.59e+05. This might indicate that there are
strong multicollinearity or other numerical problems.

警告は異なる場合もあります(例えば、設計行列の固有値に基づく)。どのようにすればそれをキャプチャできますか?多重共線性が高い変数内の条件ですか? この警告はモデル オブジェクトのどこかに保存されますか?

また、 のフィールドの説明はどこにありますかsummary()?

ベストアンサー1

多重共線性が高いかどうかは、固有値相関行列固有値が非常に低い場合、データは共線的であり、対応する固有ベクトルどの変数が共線的であるかを示します。

データに共線性がない場合、どの固有値もゼロに近くならないことが予想されます。

>>> xs = np.random.randn(100, 5)      # independent variables
>>> corr = np.corrcoef(xs, rowvar=0)  # correlation matrix
>>> w, v = np.linalg.eig(corr)        # eigen values & eigen vectors
>>> w
array([ 1.256 ,  1.1937,  0.7273,  0.9516,  0.8714])

しかし、 とするとx[4] - 2 * x[0] - 3 * x[2] = 0

>>> noise = np.random.randn(100)                      # white noise
>>> xs[:,4] = 2 * xs[:,0] + 3 * xs[:,2] + .5 * noise  # collinearity
>>> corr = np.corrcoef(xs, rowvar=0)
>>> w, v = np.linalg.eig(corr)
>>> w
array([ 0.0083,  1.9569,  1.1687,  0.8681,  0.9981])

固有値の 1 つ (ここでは最初の値) は 0 に近くなります。対応する固有ベクトルは次のようになります。

>>> v[:,0]
array([-0.4077,  0.0059, -0.5886,  0.0018,  0.6981])

無視するほぼゼロ上記の係数は基本的にx[0]x[2]と がx[4]共線的であることを示しています(予想どおり)。xs値を標準化してこの固有ベクトルを掛けると、結果は小さな分散でゼロ付近になります。

>>> std_xs = (xs - xs.mean(axis=0)) / xs.std(axis=0)  # standardized values
>>> ys = std_xs.dot(v[:,0])
>>> ys.mean(), ys.var()
(0, 0.0083)

ys.var()基本的に、これはゼロに近い固有値であることに注意してください。

したがって、高い多重線形性を捉えるには、相関行列の固有値を確認します。

おすすめ記事