2017-11-21

Rで重回帰分析 多重共線性が存在しうるデータをRで重回帰分析するときの注意点

重回帰分析の際に起こる、各独立変数間の多重共線性について実験してみます。
データセットはここから取得します。ビールの売上高を予測するという課題です。


手を動かしながら学ぶ ビジネスに活かすデータマイニング
技術評論社 (2014-08-22)
売り上げランキング: 98,606

DM_sampledata.zipを開いて、ch4_3_2.txtというファイルを開きます。適当なディレクトリに保存して、Rで読み込みます。




lm.r

> data <- read.csv("C:/workspace/R/data/ch4_3_2.txt", sep="")
> head(data)

   Revenue  CM Temp Firework
1 47.14347 141   31        2
2 36.92363 144   23        1
3 38.92102 155   32        0
4 40.46434 130   28        0
5 51.60783 161   37        0
6 32.87875 154   27        0

これをとりあえず、revenueを目的変数に、重回帰分析してみます。

lm.r

> data.lm <- lm(Revenue~.,data)
> summary(data.lm)

Call:
lm(formula = Revenue ~ ., data = data)

Residuals:
   Min     1Q Median     3Q    Max 
-6.028 -3.038 -0.009  2.097  8.141 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 17.23377   12.40527   1.389  0.17655    
CM          -0.04284    0.07768  -0.551  0.58602    
Temp         0.98716    0.17945   5.501    9e-06 ***
Firework     3.18159    0.95993   3.314  0.00271 ** 
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 3.981 on 26 degrees of freedom
Multiple R-squared:  0.6264,    Adjusted R-squared:  0.5833 
F-statistic: 14.53 on 3 and 26 DF,  p-value: 9.342e-06

ということで、偏回帰係数は以下の通りですが、CMだけ有意ではありませんでした。
気温と、近くで花火をやっていた回数が有意に売上に貢献しているようです。以下偏回帰係数です。


  • CM          -0.04284 
  • Temp         0.98716 
  • Firework     3.18159


本当はここの偏回帰係数を正規化して、標準偏回帰係数を取得します。
標準偏回帰係数とは、
なお、説明変数間の寄与の大小は回帰係数ではわかりません。回帰係数の値はそれぞれの変数がとる値の範囲や単位に依存しています。そこで説明変数間の関係を調べるには、全ての変数を平均 0 、分散 1 になるように正規化した時の回帰係数を求めます。これを標準偏回帰係数と言います。これは Excel では表示されませんので別の方法で計算する必要があります。多重回帰分析 - Qiita
らしいです。正規化後の標準偏回帰係数はこちらです。


  • CM -0.07
  • Temp 0.66
  • Firework 0.40   
そうすると、なにやらこの値は相関係数に近いらしいです。(著書ではそのプロセスを飛ばされているみたい)正規化した後の標準偏回帰係数の値がこうなるらしいです。

さて、同じように相関係数を出してみましょう。corメソッドの引数にデータフレーム型の値を入れると、相関行列を出してくれるんだとか。さっそくやってみます。

lm.r

> cor(data)
             Revenue          CM       Temp    Firework
Revenue   1.00000000 -0.07355843 0.67461456  0.43715932
CM       -0.07355843  1.00000000 0.06244943 -0.12010466
Temp      0.67461456  0.06244943 1.00000000  0.04295698
Firework  0.43715932 -0.12010466 0.04295698  1.00000000

Revenueと各変数の相関係数はこちらです。後ろは偏回帰係数なので、比較してみましょう。


  • CM  -0.07355843 | -0.07
  • Temp      0.67461456 | 0.66
  • Firework  0.43715932 |  0.40

このように、独立変数同士の相関によって、偏回帰係数がゆがめられてしまうことがあるそうです。多重共線性について調べてみたところ、こういう説明変数内での相関は、重回帰分析の結果に影響を与えてしまうため、相関係数が近いものを外すべきだそうです。

多重共線性とは?
重回帰分析を行っている際、説明変数を増やすほど決定係数が高くなりやすいため、ついついよりたくさんの説明変数を入れてしまいがちです。しかし、その際に気をつけなければならないことがあります。それが多重共線性です。
多重共線性とは、説明変数間で相関係数が高いときに、それが原因で発生する現象です。(英語で multicollinearity と言われるため、略して「マルチコ」とも呼ばれます)
  1. 分析結果における係数の標準誤差が大きくなる
  2. t値が小さくなる
  3. 決定係数が大きな値となる
  4. 回帰係数の符号が本来なるべきものとは逆の符号となる

それでは、このような多重共線性に直面してしまった場合、どのように対応するのが良いのでしょうか。最も一般的な解消法は、「相関関係が高いと考えられる説明変数を外すこと」です。多重共線性とは? 〜 概要と対応方法 〜 | 株式会社サイカ  




手を動かしながら学ぶ ビジネスに活かすデータマイニング
技術評論社 (2014-08-22)
売り上げランキング: 98,606

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...