線形回帰分析(単回帰,重回帰)を学ぶときによく注意すべき点として多重共線性問題というものがあります。
スポンサーリンク
多重共線性は教科書次第で結構色々説明が違っていて、
※これは単に教科書が想定している読者の違いだと思う。
まず発生原因として
・説明変数間の相関が大きいと発生する
・説明変数同士の相関が大きいと発生する
・説明変数行列とその転置
の積の固有値に0があって、解が1つに定まらない場合発生する
・逆行列が取れないため、解が定まらず発生する
等々
また、その結果として
・推定結果がおかしくなる
・推定結果の分散が大きくなる
・推定結果の解が定まらなくなる
等々
一応多重共線性とひとくくりで説明されてはいますが、この辺も厳密には区別があって、
本当に説明変数間に誤差無く線形関係が発生している場合は、逆行列が求まらないので、解が出てこないわけですが、
実際のデータだとほぼ線形関係はあっても、確率的な誤差が生じるため、厳密な線形関係は発生しておらず、
一応逆行列は求まるのだけども、事実上多重共線性が発生しているため、推定の度に推定結果が大きく変化してしまう(つまり分散が大きくなったり、符号がおかしくなったりする)状況が生じます。
その辺が想定読者やその教科書の目的に合わせてないまぜになっているため、本によって説明が様々あり、
色々記述があるものだから、理解としてとりあえず
「説明変数同士の相関があると、面倒なことがあるらしいから気を付けよう」
と覚えている人も多いかと思います。
あるデータ解析の講義にて
私がある大学の理系のデータ解析に関する講義を受けていた時の話です。
一応、受講生は皆機械学習が専門で、場合によっては統計学も勉強している大学院生が大多数で、中々レベルの高いものでした。
この講義では、最終日で受講生が自分の好きなデータを使って自由にデータ解析をして、発表するというものがあって、かなり楽しかった思い出があるのですが、少々違和感を覚えたこともありました。
特に違和感を覚えたのが多重共線性のチェックです。
受講生の大半が、重回帰分析を使用していたのですが
(恐らく簡単に行えて、前夜から初めても終わるからw)
はじめのデータチェックの段階で「多重共線性が心配なので、各変数の散布図をプロットして確認してみました。」と、次のような図を出していたのです。
これは、Rのプロット機能で、データフレームをplotに突っ込むと出してくれるのですが
x <- read.table("https://stats.biopapyrus.jp/data/sleep_in_mammals.txt", header = TRUE) plot(x)
要は発表者の言い分的には、下のような変数は見た目で相関している恐れがあるので、片方外すということでした。
もう少し手間をかけている人は視覚的なチェックだけではなく相関係数も出したりしていました。
この手法の見落とし
言いたいことはよくわかるというか、私もこの処理はするのですが、この処理を行っても多重共線性は発生する恐れがあることを理解しているかどうかは重要じゃないかなと思うわけです。
このプロットによる手法って要は、「各変数間の相関をチェックしました」ってことだと思うのですが、
例えば説明変数がまであったとして、
の関係は確かに多重共線性を産みますが、それだけではなく
の関係だって多重共線性を産むわけです。
要は2変数間のチェックはしているけども、多変数間のチェックはプロットだけでは出来ないのでは?ということです。
この辺のチェックのための基準として一応vif基準というものがあって、最低限vifの値も見るべきではと思ってみたりもしたわけですが、それをしている人は誰もいませんでした。
どうしても「説明変数間の相関が原因」だと思ってしまうと、二変数間の相関を確認すれば良いんでしょう?と思ってしまうわけですが、実際は多変数間の線形関係についてチェックしなければいけないわけです。
中々回帰分析一つをとっても難しいですね。
次回はVIF基準に関する話を記事にしようかなと思います。