<< トップページへ

<< 目次へ

最終更新日: 2009.5.12

多重共線性はType IIの平方和で分かる



 多重共線性とは、連続型の説明変数を2つ以上用いる場合に、説明変数同士の相関関係が高いと生じる問題である。言い方を換えて表現すると、ある説明変数X1が応答変数Yを説明する割合(説明率)を別のある説明変数X2を取り入れることによって下げてしまうことである。つまり、本来、X1はYをうまく説明できているのにもかかわらず、X2がそれを邪魔している状態なのである。

 これは重回帰分析を行う前に相関行列を作成してみたり、散布図を描いて相関の高そうな変数を確認してみることによって回避することができる。ただし、相関係数で判断する場合、これといった基準などないので、結局は経験と試行錯誤に頼るしかない部分も多い。

 それでは、ある説明変数の応答変数に対する説明率を、別のある説明変数が邪魔をしているとは、いったいどういったことであろうか。実際にそういった例をあげてみよう。

 以下のデータセットは1日のパソコンの注視時間(Time)と片眼それぞれの裸眼視力(右目がRight、左目がLeft)をまとめたものである。ここで問題となるのは、視力の低い者ほど1日のうち、パソコンに注視している時間が長いのではないかということである。この問いについて、説明変数にRightとLeftの2つを用いる場合とそのどちらか1つを用いる場合が考えられる。

Time Right Left
120 0.5 0.6
345 0.3 0.2
100 0.7 0.7
210 0.6 0.8
60 0.9 0.8
100 0.8 0.8
30 1.2 0.9
280 0.7 0.5
190 0.4 0.5
50 1.0 1.2
380 0.2 0.2
285 0.5 0.2

 直感的には応答変数を説明するための変数は多い方が、より正確な予測ができるのではないかと考えられるかもしれない。たしかにそれは正解で、適切な説明変数は多ければ多いほどよい。しかし、そのなかに1つでも不適切な(余分な)変数が入り込んでいると、他の説明変数の説明率を下げてしまうことにもなりかねないことには常に注意しておかなければならないだろう。

 試しにまずは Time = Right + Left といった2つの説明変数を用いたモデルを解析して、Timeに対する分散分析表を作成してみよう。

# 上のデータをメモ帳などにコピペする
# ここではRのワークディレクトリにtajyu.txtというファイル名で保存してある。
> dat <- read.table("tajyu.txt", header=TRUE)

# パスを通しておく
> attach(dat)

# まずは交互作用項が有意であるかどうかを確認する。
# ここでは有意ではない。
> result <- lm(Time ~ Right + Left + Right*Left)

# 分散分析表の出力
> summary(aov(result))
            Df Sum Sq Mean Sq F value    Pr(>F)    
Right        1 112901  112901 32.8634 0.0004376 ***
Left         1  15859   15859  4.6162 0.0639205 .  
Right:Left   1   3198    3198  0.9308 0.3629103    
Residuals    8  27484    3435                      
---

# update()で交互作用項を除いてモデルを更新する
> result2 <- update(result, Time ~ . - Right:Left, data=dat)

# 分散分析表の出力
> summary(aov(result2))
            Df Sum Sq Mean Sq F value    Pr(>F)    
Right        1 112901  112901  33.118 0.0002746 ***
Left         1  15859   15859   4.652 0.0593713 .  
Residuals    9  30681    3409                      
---

# carパッケージを読み込む(type IIの平方和を計算するために必要)
> library(car)

# Type IIの平方和を計算する
> Anova(result2, test="F", type="II")
Anova Table (Type II tests)

Response: Time
           Sum Sq Df F value  Pr(>F)  
Right      5811.6  1  1.7047 0.22405  
Left      15858.9  1  4.6520 0.05937 .
Residuals 30681.5  9                  
---

 ここでより見やすいように以上の分散分析表を表にまとめておこう。まず注目すべきはp値であろう。一般的な平方和ではRightは有意であり、その値も非常に小さいのがわかる(p = 0.000)。ところがType IIの平方和ではp値は極端に高くなり、Rightは有意ではなくなっている(p = 0.224)。これはどういうことだろうか。

 そこで今度はSS(平方和)の値に注目してみよう。一般的な平方和において、Rightの値は112901であるのに対して、Type IIの平方和においてはRight = 5911.6といったように、SSの値が減少している。ところがLeftのSSはどちらも同じである(したがってp値も同じである)。これは変数Leftの投入によって、変数Rightの説明率が下がるということを示している。

一般的な平方和
SS DF F P
Right 112901 1 33.118 0.0002746
Left 15859 1 4.652 0.0593713
Residuals 30681 9


Type IIの平方和
SS DF F P
Right 5811.6 1 1.7047 0.22405
Left 15858.9 1 4.6520 0.05937
Residuals 30381.5 9

 そもそも今回の解析では、Leftを説明変数として用いるのは適切ではなかった。これは最初からある程度予想ができたことである。なぜかというと、右目の視力と左目の視力は、多くの人においてそれほど極端に異なるはずはなく、この2つのデータは強い相関が存在するからである。例えば、右手の長さと左手の長さなどといったデータもそれぞれに強い相関が見られるだろう。こういった相関関係が見られる変数を同時投入するのは原則として好ましくないのである。その理由は、すでに分かっているように、どちらかの変数が別のある変数の説明率を下げてしまうからである。

 逆にある変数を投入することによって、元々モデルに組み込まれている変数の説明率を増加させるような場合もある。そういうこともあるので、あまりにも変数を節約することに敏感になりすぎてもいけない。まとめると、どの説明変数を用いるかを考える場合に、以下の2点に気を配ってモデルを選択する必要があるだろう。

 最後に、多くはType IIの平方和を計算することをしない。少なくとも心理学の諸分野ではそうである。しかし、今回の例で見てきたように、一般的な平方和を用いて計算をすると、実際には有意でない変数を有意であると判断してしまうことがある。もしType IIの平方和を知らずに分析をしたとしたら、ほぼ間違いなくRightとLeftの両変数を投入したモデルが正しいと判断されてしまうだろう。だが実際に正しいモデルはTime = Rightである。

 そもそも、重回帰分析を行う場合、分析者の多くは各係数についてのp値にしか感心がないかもしれない。それで分散分析表を見ずに分析を進め、その結果から議論を展開していくのは非常に危険であろう。繰り返しになるが、今回の例において、一般的な平方和を用いて計算した場合Rightは有意だが、実際には有意ではないのである。この事実を見逃してはならない。