akatak’s blog

プログラム初心者の50代ビジネスマンがセカンドキャリアを目指して働きながらPythonを中心に独学しています。自らの覚え書きや成果物、感じたことなどを脈絡もなく書き連ねるブログです。

Pythonよる線形回帰分析(2)〜線形回帰分析の留意点

線形回帰分析における留意点をまとめると、以下の通り。
(「Introduction to Statistical Learning」 と「RとPythonで学ぶ[実践的]データサイエンス&機械学習」を参考にしてまとめています。)

1. 残差の分布

(1) 正規性

  • statsmodelsでは、回帰モデルを作成した際に、モデルを格納したオブジェクトに残差の値が記録されているため、これらの値を取り出してヒストグラムや密度プロット等を作成して残差の分布を確認する。
  • 残差について正規分布が仮定できないような場合、そして、正規分布ではなく別のモデルが仮定できるような場合については、線形回帰ではなく一般線形回帰モデルを使う。

(2) 非線形

  • 非線形性を特定するには、残差プロット(横軸:予測値、縦軸:残差)が有効。
  • 残差プロットが非線形性を示している場合には、log X, \sqrt{X},  X^{2} を試してみると良い。

(3) 相関

  • 線形回帰分析における重要な前提は、誤差項が互いに独立しているということ。
  • もし、誤差項が互いに相関がある場合には、本来の標準誤差を低く見積もってしまう傾向がある。結果として、信頼区間や予測値の間隔が本来より狭くなってしまう。
  • 時系列データの場合にこうした相関が発生しやすく、時間の関数として残差をプロットすると良い。
  • 一般論として、線形回帰モデルには、無相関の誤差という前提が極めて重要であるため、こうした相関リスクを軽減するために、実験のデザインを工夫することが大事。

(4) 分散の一定性

  • 線形回帰分析における重要な前提のもう一つが、残差の分散が一定である、というもの。線形回帰モデルにおける標準誤差、信頼区間、仮説検定は全てこの前提に依拠している。
  • もしこの問題に当たったら、対応の一つが、 logY\sqrt{Y} により Y を変換してみること。

2. 多重共線性

  • (多重)共線性とは、2つもしくはそれ以上の説明変数の相関が高い状況をいう。
  • 共線性があると、回帰係数の予測値がより不正確になり、回帰係数の標準誤差が大きくなる。
  • 共線性を見つける簡単な方法は、説明変数の「相関係数マトリクス」を見ること。しかし、この方法で全ての共線性が見つかる訳ではない。それぞれの相関はそれほど高くなくても3つか4つの説明変数により共線性が発生する場合があり、これは多重共線性と呼ばれる。
  • 相関係数マトリクスを見るよりも良いのは、分散拡大係数(VIF: Variance inflation factor)を計算すること。VIFは個々の説明変数ごとに算出される。VIFの最小値は1で、この場合、共線性が全くないことを示す。VIFが10以上(5以上と厳しく設定する場合もあり)であれば、共線性の問題があり、該当する説明変数を削るのが望ましいというのが経験則。

    {\displaystyle
             VIF(\hat{\beta}_j) = \frac{1}{1-R^{2}_{X_j|X_-j}}
   }

  • ここでR^{2}_{X_j|X_-j}は、説明変数X_jを他のすべての説明変数で回帰分析をした場合の決定係数を表す。
  • 共線性が認められた場合の対応として2つ。1つは問題のある説明変数のうち一つを除くこと。もう一つは、共線性が認められる説明変数2つから1つの新たな変数を作成すること。
  • 交互作用項があるモデルは多重共線性が発生しやすい。この場合に、多重共線性を避けるために使われる方法が「中心化(centering)」。中心化とは、元の値を平均値との差で置き換える方法。
  • 交互作用は常に加えるべきというものではない。解釈の複雑さや多重共線性の問題に加えて、オーバーフィッティングの危険性も増大するので、注意が必要。
  • 多重共線性を確認するときの問題は、ダミー変数については1つの説明変数から展開されていること。そこで、ダミー変数もうまく扱えるようなGVIF(GeneralizedVarianceInflationfactor)という指標が提案されている。

3. 外れ値の取扱い

(1) 観測値の外れ値 (Outlier)

  • 外れ値を特定するには、残差プロットを利用すると良い。しかしながら、どの程度大きい場合に外れ値としたら良いか判断が難しい場合あり。
  • その場合には、単なる残差をプロットするのではなく、スチューデント化残差(studentized residuals)という各残差を標準誤差で割った数値をプロットすると良い。スチューデント化残差が3を超えてくれば、外れ値の可能性が高い。
  • また、外れ値がデータ収集や記録の段階でのミスによるものということが明らかなのであれば、観測値から除外することも一つの解決策。しかし、外れ値は、説明変数の欠如を示している可能性もあるので、取り扱いには注意が必要。

(2) 説明変数の外れ値(High Leverage Point)

  • High Leverage Point(高レバレッジ点)とは通常と異なるx値のことをいう。
  • レバレッジ点は、回帰直線への影響が大きい傾向があり、それらを特定することは非常に重要。
  • この高レバレッジ点を見つけるには、単回帰モデルの場合は、以下のleverage statisticを計算する。
    {\displaystyle
       h_i = {\frac{1}{n} + \frac{(x_i - \bar{x})^{2}}{\sum_{i'=1}^{n}(x_{i'} - \bar{x})^{2}}}
    }

  • この数値が大きければ高レバレッジを示している。{h_i} は常に {\displaystyle\frac{1}{n}} から1の間にくる。また、全ての平均レバレッジ{\displaystyle\frac{p+1}{n}}

4. その他

なお、前回に続き、「RとPythonで学ぶ[実践的]データサイエンス&機械学習」の線形回帰分析をPythonで行なっています。具体的には、交互作用項と多重共線性の関係、および中心化による解決策の箇所です。

gistdb00edb8473fd2ec4ba03eeae1e71f45