統計分析において、複数の変数間の関係性を探ることは不可欠である。特に、ある結果(目的変数)が複数の原因(説明変数)によってどのように影響されるかを分析する際には、重回帰分析が強力なツールとなる。また、2つの変数間の純粋な関係性を知りたい場合には、偏相関係数が用いられる。これら二つの手法は、一見すると似ているようであるが、その目的と解釈には明確な違いがある。そして、どちらの分析においても多重共線性という共通の、しかし深刻な問題に直面することがある。
本ブログ記事では、重回帰分析と偏相関係数における多重共線性の影響、その確認方法、そして対処法について、具体的な例とRでの計算例を交えながら詳しく解説する。
多重共線性とは何か?
多重共線性(Multicollinearity)とは、重回帰分析において、説明変数(独立変数)の間に強い相関関係が存在する状態を指す。つまり、ある説明変数が他の説明変数と高い線形関係にあるとき、多重共線性が疑われる。これは、偏相関係数を計算する際にも同様の問題を引き起こす可能性がある。
多重共線性の何が問題なのか?
多重共線性が存在すると、以下のような問題が生じる。
- 回帰係数の不安定性: 推定される回帰係数の標準誤差が大きくなり、係数の信頼性が低下する。これにより、個々の説明変数が目的変数に与える影響の方向や大きさを正確に解釈することが困難になる。
- P値の信頼性低下: 係数の標準誤差が大きくなるため、P値が大きくなり、実際には統計的に有意な効果があるにもかかわらず、それが検出されない(第二種の過誤)可能性が高まる。
- モデルの解釈の困難さ: 複数の説明変数が互いに強く関連しているため、各変数の寄与を分離して解釈することが難しくなる。
- 予測精度の低下(場合によっては): モデル全体の予測能力は保たれることもあるが、特定の変数を除外したり、新しいデータがこれまでの共線性のパターンと異なる場合に、予測精度が低下する可能性がある。
重回帰分析における多重共線性
重回帰分析では、目的変数 $Y$ を複数の説明変数 $X_1, X_2, \ldots, X_k$ で説明するモデルを構築する。
$$Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_k X_k + \epsilon$$
ここで、説明変数 $X_i$ の間に強い相関がある場合に多重共線性が発生する。
重回帰分析における多重共線性の確認方法
- 相関行列の確認:
説明変数間のピアソン相関係数を計算し、絶対値が0.7以上など、高い相関を持つ組み合わせがないかを確認する。ただし、これは単なる目安であり、2変数間の相関が低くても、3つ以上の変数間で複雑な線形関係がある場合は検出できない。 - VIF (Variance Inflation Factor: 分散拡大要因) の計算:
VIFは、個々の回帰係数の分散が、その説明変数が他の説明変数と無相関である場合に比べてどの程度拡大しているかを示す指標である。一般的に、VIFが10以上であれば多重共線性が存在すると判断される。より厳密には5以上でも注意が必要とされている。 各説明変数 $X_j$ のVIFは、その $X_j$ を目的変数とし、残りの説明変数を説明変数とする補助回帰モデルの決定係数 $R_j^2$ を用いて、以下の式で計算される。 $$VIF_j = \frac{1}{1 – R_j^2}$$ $R_j^2$ が1に近づくほど(つまり、$X_j$ が他の説明変数によってよく説明されるほど)、VIFは無限大に発散し、多重共線性が強いことを示す。
重回帰分析における多重共線性の対処法
- 変数の除外:
多重共線性を引き起こしている説明変数のうち、理論的に重要度の低い変数や、より直接的な関連性の低い変数をモデルから除外する。これは最も単純な方法であるが、情報損失のリスクもある。 - 変数の結合(合成変数):
強く相関している複数の変数を、新しい1つの合成変数(例えば、合計値や平均値など)に変換する。例えば、身体活動の複数の指標(歩数、運動時間など)が強く相関している場合、これらを統合した「活動レベル」のような指標を作成することが考えられる。 - 主成分分析 (PCA) の利用:
説明変数が多数あり、それらの間に複雑な相関構造がある場合に有効である。主成分分析により、元の変数の情報を保持しつつ、互いに無相関な新しい変数(主成分)を生成し、これらを回帰モデルに投入する。 - リッジ回帰やラッソ回帰の利用:
これらの正則化回帰手法は、回帰係数にペナルティを与えることで、多重共線性の影響を軽減し、係数を安定化させる効果がある。特に予測モデルの構築において有効である。
偏相関係数計算における多重共線性
偏相関係数(Partial Correlation Coefficient)は、他の特定の変数の影響を取り除いた上で、2つの変数間の純粋な線形関係を測定する指標である。例えば、$X$ と $Y$ の間の偏相関係数を $Z$ を調整変数として計算する場合、$X$ と $Y$ から $Z$ の影響を除去した残差間の相関係数を計算する。
$$r_{XY \cdot Z} = \frac{r_{XY} – r_{XZ} r_{YZ}}{\sqrt{(1 – r_{XZ}^2)(1 – r_{YZ}^2)}}$$
ここで、$r_{XY}$ は $X$ と $Y$ の間のピアソン相関係数、$r_{XZ}$ は $X$ と $Z$ の間のピアソン相関係数、$r_{YZ}$ は $Y$ と $Z$ の間のピアソン相関係数である。
偏相関係数自体は、多重共線性を「問題として引き起こす」というよりは、「他の変数の影響を除去した関係性」を評価する際に、その調整変数が多重共線的に振る舞う場合に解釈が難しくなる、という文脈で問題になることがある。特に、調整変数が多数あったり、調整変数間に強い相関がある場合、各変数の純粋な効果を分離することが難しくなる可能性がある。
偏相関係数計算における多重共線性の確認方法
偏相関係数を計算する際に、どの変数を調整変数として含めるかを検討する段階で、調整変数候補間の多重共線性を確認することが重要である。これは、重回帰分析の場合と同様に、相関行列やVIFを確認することで行える。調整変数候補間で高いVIFが検出された場合、それらの変数を用いて偏相関係数を計算しても、特定の変数の「純粋な」効果を適切に評価できない可能性がある。
偏相関係数計算における多重共線性の対処法
偏相関係数を計算する文脈での多重共線性の対処法は、基本的には重回帰分析と共通するが、目的が「2変数間の純粋な関係性」の評価であるため、アプローチが少し異なる。
- 調整変数の見直し:
調整変数間で多重共線性が高い場合、すべての調整変数を同時に考慮するのではなく、その中から最も理論的に重要と考えられる変数や、他の変数と強く相関しない変数を選択して調整する。 - 階層的な偏相関の計算:
複数の調整変数がある場合、それらを一度に調整するのではなく、理論的な順序に基づいて段階的に調整し、その変化を観察する。 - より高度な統計モデルの検討:
単純な偏相関係数ではなく、構造方程式モデリング(SEM)など、変数間の複雑な関係性を明示的にモデル化できる手法を検討することも有効である。
Rを用いた計算例
ここでは、重回帰分析における多重共線性の確認方法(VIF)についてRで具体的な計算例を示す。偏相関係数の計算も合わせて示す。
まず、サンプルデータを作成する。
# データの生成
set.seed(123) # 再現性のためのシード設定
n <- 100 # サンプルサイズ
# 説明変数
X1 <- round(rnorm(n, mean = 50, sd = 10))
X2 <- round(0.8 * X1 + rnorm(n, mean = 0, sd = 5)) # X1と強い相関があるX2
X3 <- round(rnorm(n, mean = 30, sd = 8))
# 目的変数
Y <- round(2 * X1 + 1.5 * X2 - 3 * X3 + rnorm(n, mean = 0, sd = 10))
# データフレームの作成
data_df <- data.frame(Y, X1, X2, X3)
# データの一部表示
head(data_df)
作成したデータの一部:
> # データの一部表示
> head(data_df)
Y X1 X2 X3
1 -15 44 32 48
2 28 48 40 40
3 117 66 52 28
4 48 51 39 34
5 71 51 36 27
6 139 67 53 26
>
重回帰分析と多重共線性の確認(VIF)
# 重回帰モデルの構築
model <- lm(Y ~ X1 + X2 + X3, data = data_df)
summary(model)
実行結果:
> # 重回帰モデルの構築
> model <- lm(Y ~ X1 + X2 + X3, data = data_df)
> summary(model)
Call:
lm(formula = Y ~ X1 + X2 + X3, data = data_df)
Residuals:
Min 1Q Median 3Q Max
-25.1875 -6.5573 0.4057 6.7991 25.6351
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.5898 7.9012 0.581 0.563
X1 1.8844 0.2083 9.046 1.67e-14 ***
X2 1.5751 0.2210 7.129 1.88e-10 ***
X3 -3.0676 0.1412 -21.732 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 10.55 on 96 degrees of freedom
Multiple R-squared: 0.9355, Adjusted R-squared: 0.9335
F-statistic: 464.4 on 3 and 96 DF, p-value: < 2.2e-16
>
上記の回帰結果を見ると、一見問題なさそうであるが、念の為、VIFを計算して確認する。
car
パッケージの vif()
関数を使用する。
# car パッケージのインストールと読み込み (初回のみ)
# install.packages("car")
library(car)
# VIFの計算
vif(model)
実行結果:
> # VIFの計算
> vif(model)
X1 X2 X3
3.225747 3.196452 1.018402
>
$X1$ と $X2$ のVIFがそれぞれ約3.2と算出された。これは、VIF=5を超えないため、多重共線性の懸念は低いことを示唆している。特にVIF=10を超えると深刻と見なされるが、VIF=5を超えた場合、注意が必要である。
ただし、本来、X1 と X2 は相関するように作成されており、以下のように 0.829 という強い相関を持っている。このような追加の情報を合わせて、総合的に判断するのがよい。
> cor.test(data_df$X1, data_df$X2)
Pearson's product-moment correlation
data: data_df$X1 and data_df$X2
t = 14.659, df = 98, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.7552494 0.8816372
sample estimates:
cor
0.8287299
>
この場合、多重共線性が強く疑われるわけではないが、$X1$と$X2$が強く相関しているため、どちらか一方を除外するか、あるいはこれら2つの変数を組み合わせて新しい変数を作成するのもよい。ここでは、例えば$X2$を除外してみる。
# X2を除外したモデル
model_reduced <- lm(Y ~ X1 + X3, data = data_df)
summary(model_reduced)
実行結果:
> # X2を除外したモデル
> model_reduced <- lm(Y ~ X1 + X3, data = data_df)
> summary(model_reduced)
Call:
lm(formula = Y ~ X1 + X3, data = data_df)
Residuals:
Min 1Q Median 3Q Max
-28.074 -10.214 0.972 8.012 34.510
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.3071 9.7207 0.443 0.659
X1 3.1131 0.1439 21.632 <2e-16 ***
X3 -3.0335 0.1736 -17.478 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 12.98 on 97 degrees of freedom
Multiple R-squared: 0.9014, Adjusted R-squared: 0.8994
F-statistic: 443.4 on 2 and 97 DF, p-value: < 2.2e-16
>
$X2$ を除外したモデルでは、$X1$ の係数(Estimate)が 1.88 から 3.11 と大きくなった。これは、多重共線性が緩和された結果、$X1$ の本来の寄与がより明確になった可能性があることを示唆している。この場合、X1とX2のVIFが完全に低く問題ないというわけではなかった原因は、それらが高く相関していたこと(今回のデータ生成では$X2$が$X1$から派生)によるもので、片方を除外することで適切にモデルを解釈できるようになったと考えられる。
偏相関係数の計算
ppcor
パッケージの pcor()
関数を使用する。
# ppcor パッケージのインストールと読み込み (初回のみ)
# install.packages("ppcor")
library(ppcor)
# YとX1の間の偏相関係数をX3で調整
pcor.test(data_df$Y, data_df$X1, data_df$X3)
実行結果:
> # YとX1の間の偏相関係数をX3で調整
> pcor.test(data_df$Y, data_df$X1, data_df$X3)
estimate p.value statistic n gp Method
1 0.9101073 6.829201e-39 21.63154 100 1 pearson
>
この結果は、$X3$ の影響を取り除いた上で、$Y$ と $X1$ の間に強い正の相関があることを示している(偏相関係数約0.91、p値は、0.05 未満)。
では、多重共線性が存在しそうな $X1$ と $X2$ の関係性を、$X3$ で調整した場合を考えてみる。
# X1とX2の間の偏相関係数をX3で調整
pcor.test(data_df$X1, data_df$X2, data_df$X3)
実行結果:
> pcor.test(data_df$X1, data_df$X2, data_df$X3)
estimate p.value statistic n gp Method
1 0.8274371 4.77537e-26 14.51196 100 1 pearson
>
$X3$ で調整しても、$X1$ と $X2$ の間には依然として強い偏相関があることがわかる(約0.83)。これは、たとえ他の変数(この場合は$X3$)を調整しても、これら2つの変数が本質的に強く関連していることを示唆している。偏相関係数を用いて特定の2変数間の純粋な関係性を評価する際、調整変数間で多重共線性がある場合、どの変数を調整変数として含めるか、あるいはその組み合わせによって、偏相関係数の解釈が難しくなる可能性がある。
まとめ
多重共線性は、重回帰分析においても偏相関係数の解釈においても、分析結果の信頼性と解釈性を大きく損なう可能性のある問題である。
- 重回帰分析: 説明変数間の多重共線性は、個々の回帰係数の推定を不安定にし、統計的有意性の判断を困難にする。VIFはこれを検出するための重要な指標である。対処法としては、変数の除外、結合、主成分分析、リッジ/ラッソ回帰などが挙げられる。
- 偏相関係数: 偏相関係数自体が多重共線性を「引き起こす」わけではないが、調整変数間で多重共線性がある場合、特定の2変数間の「純粋な関係性」を適切に評価することが難しくなる可能性がある。この場合も、調整変数の選定や、より高度な分析手法の検討が重要である。
データ分析を行う際には、常に説明変数間の相関関係に注意を払い、多重共線性の兆候が見られた場合には、適切な確認と対処を行うことで、より信頼性の高い分析結果と解釈を得られるであろう。
コメント