logo

回帰分析のモデル診断 📂統計的分析

回帰分析のモデル診断

必要性

単純回帰分析の場合は、独立変数と従属変数を考慮しても$2$の次元であるため、分析が適切に行われたか一目で確認することができる。しかし、多重回帰分析の場合$3$の次元を超えると図で描きにくくなり、分析が実際に適切であるかを確認するのが難しくなる。回帰分析の仮定を満たさないが仮説検定は通過する場合があるが、この場合分析は間違っているとするしかない。

分析が間違っているのは主に(1)データが線形モデルに合わない場合や(2)分析結果と実際のデータに対する理解との乖離が激しい場合だ。モデル診断はデータが線形モデルに適合しているかどうかを確認するために行われる。

診断法 1

データが線形モデルに合わないとは、簡単に言えばデータが直線状にないということだ。データが線形モデルに合っているかどうかは、標準化された残差グラフを見てモデル診断を行うことで判断する。この残差分析は、高次元で直線を描くのが難しいために考案されたかなり独創的な方法である。残差を計算する理由がそもそもこれであるとも言える。

1.png 2.png 残差グラフで下記の四つの条件が満たされた場合、モデル診断はパスしたと見なされる。

  • (i) 線形性Linearity: 残差が$0$を中心に対称的に分布していればよい。
    • これは回帰分析の本質とも言える前提であり、回帰分析の目的が直線を求めることであるため、線形性を満たさないと意味がない。もともと回帰分析を使用する理由自体が線形性があると推測することにあるので、実際の分析では非常に簡単に満たされる。
  • (ii) 等分散性Homoscedasticity: 残差の分布が均等であればよい。
    • 特定の区間で変動が急に小さくなったりすると、データが同じプロセスで得られたとは言い難くなる。調査員の違い、ミスなどの問題を考慮せざるを得ない。データが後になるほど分散が大きくなったり小さくなったりする場合、変数の変換によって部分的に解決することができる。
  • (iii) 独立性Independecy: 残差同士にどんな傾向もなければよい。
    • 残差に何らかの傾向があるということは、誤差が完全に偶然であるという回帰分析の仮定に反する。独立性が欠けているということは、逆に言えば、まだ私たちが知らない規則、たとえば自己相関がある可能性があるという意味になる。この場合、遠回りして解決しようとするよりも、時系列分析など、より適したツールを探すほうが良い。程度がひどい場合は一目で分かるほど明らかになるが、そうでなければ大きな問題ではないとも言える。独立性をチェックするためにダービン-ワトソン検定を安易に使わないこと。ダービン-ワトソン検定は、厳密に言えば、一定の間隔で離れた残差の自己相関を見つけるものであり、独立性を確認するものではない。明らかな傾向があるのにダービン-ワトソン検定を通過したからと言って独立と信じてはいけない。
  • (iv) 正規性Normality: 残差が標準正規分布に従っているように見えればよい。
    • 他の前提と異なり、正規性はシャピロ-ウィルク検定ハルケ-ベラ検定のように客観的な診断が可能である。しかし、問題が単純であるとは限らず、主に正規性に大きな影響を与えるのが異常値であることが多い。分析者が異常値に該当するデータを直接見て、その現象を直接説明できれば大きな問題にはならない。異常値異常値といっても安易に除外してはいけないこと。例えば、標本が$300$個で、上下にシックスシグマ($\pm 3 \sigma$)を超える異常値が$3$個程度あれば、それは正常であるとされる。異常値が多すぎるのも問題だが、分布理論と異なり異常値が過剰に少なすぎるのも正規分布に適切に従っているわけではない。

これら四つの条件は無作為に並べられたのではなく、重要な順に配置されており、回帰係数に対する仮説検証の理論的導出過程を見れば、この順序を理解することができる。2実際の統計分析に臨むと、すべてのデータがきれいに現れるわけではなく、時にはいくつかの条件と妥協しなければならない場面もある。そのような場合、異常値が多かったり、わずかに偏っていても、ある程度正規性から逸脱しても許容できる場合がある。

このようなモデル診断はかなりの部分が目視に依存しており、データに対する理解が不可欠である。間違った部分を見つけることが第一の問題であり、どのように解決するかが第二の問題である。この能力を養う方法は、可能な限り実際の分析に取り組み、多くのタイプを見ることが最善である。

コード

以下は、残差グラフを出力するRコードである。

out<-lm(rating~.,data=attitude); summary(out)
win.graph(5,5); plot(rstudent(out),main="표준화된 잔차")

  1. Hadi. (2006). Regression Analysis by Example(4th Edition): p86~88. ↩︎

  2. 残念ながら、学部レベルで理解するのはかなり難しい。 ↩︎