Rによる統計的学習入門 〜重回帰分析〜

 

今回は重回帰分析について、まとめてみる。(未完)

 

目次

1、重回帰分析って何?〜概要

2、何してるの?〜アルゴリズム

3、例えば?〜分析

4、終わりに

 

1、重回帰分析って何?〜概要

単回帰分析では一つのYに対して一つのXだったが、重回帰分析ではXが2つ以上。

世の中の原因と結果は大体主な理由が1つのものから来てることの方が少ないかもしれない。大体いくつか原因と結果があるものだ。

2、何してるの?〜アルゴリズム

線形回帰と同じように、係数を最小二乗法で推測していきます。行列代数を使うみたいなので、今回はこの本でも省かれていたので、また今度詳細は書きます。

 

重回帰を行うときに4つ大切なことがある。

1、X1, X2, X3 ..., Xpの予測変数とYの応答変数の関係

応答変数と予測変数の間に関係があるかどうかはf:id:song15song1:20211021130035p:plainであるかを調べる。

帰無仮説

f:id:song15song1:20211021130113p:plain

対立仮説は、

f:id:song15song1:20211021130133p:plainf:id:song15song1:20211021130236p:plainのうち少なくとも1つは非零である。

 

ここではまた、F統計量を計算する。

モデルの仮定が正しければ、

 

f:id:song15song1:20211021130326p:plainが真ならば、

 

XとYが関係ないものなら、F値は1に近くなって、f:id:song15song1:20211021130133p:plainが真であるなら、Fは1より大きくなる。

 

2、予測変数のなかで、重要な、Yをちゃんと説明しているものを選ぶ。

F値を見た後はp値を見る。

少なくとも一つの予測変数が応答変数に関係してる場合、次はどの予測変数が実際に関係しているかを考える。

もし、p=2ならば、

1、どの変数も含まない、

2、X1のみ、

3、X2のみ、

4、X1とX2両方を含むモデル

 

を考えて、一番良いモデルを選ぶ。その際使われるのは、MallowのCp赤池情報量基準(AIC)、ベイズ情報量基準(BIC)、そして、自由度調整済みf:id:song15song1:20211021130520p:plainなどがある。pがより大きいものも含めて、これらは後のブログでまた詳しく書く、

 

3、モデルの当てはめ

モデルの当てはめではRSEとf:id:song15song1:20211021130520p:plainがよく使われる。

f:id:song15song1:20211021130520p:plainが1に近いということはモデルが応答変数の分散のうち多くの部分を説明しているということ。

 

RSEは重回帰分析だとこの式を使う。

f:id:song15song1:20211021130611p:plain

 

4、予測(3つの不確かなもの)

1、最小二乗法による予測と母回帰との差

2、世の中のモデルはだいたい直線ではない

3、もし母回帰がわかっていても、完璧に応答変数を予測することはできない。

 

以上を踏まえて、分析を行う。

 

3、例えば?〜分析

本にあるMASSパッケージとISLRパッケージをまず読み込み、

fix()は別ウィンドでデータを表示できる。

f:id:song15song1:20211021130639p:plain



names()で中身を見れる。

 

プログラム

> library(MASS)

> install.packages("ISLR2")

> library(ISLR2)

> fix(Boston)

> names(Boston)
 [1] "crim"    "zn"      "indus"   "chas"    "nox"    
 [6] "rm"      "age"     "dis"     "rad"     "tax"    
[11] "ptratio" "lstat"   "medv" 

 

最小二乗法の当てはめはlm()関数を使う。lm(y~x,data)のようにlm()関数は使う。

重回帰分析なので、lm(y~x1+x2+x3)のように使う。summary()関数で全ての予測変数の回帰係数が表示される。

 

プログラム

> lm.fit <- lm(medv ~ lstat + age, data = Boston)
> summary(lm.fit)

 

Call:
lm(formula = medv ~ lstat + age, data = Boston)

Residuals:
    Min      1Q  Median      3Q     Max 
-15.981  -3.978  -1.283   1.968  23.158 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 33.22276    0.73085  45.458  < 2e-16 ***
lstat       -1.03207    0.04819 -21.416  < 2e-16 ***
age          0.03454    0.01223   2.826  0.00491 ** 
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6.173 on 503 degrees of freedom
Multiple R-squared:  0.5513,    

Adjusted R-squared:  0.5495 
F-statistic:   309 on 2 and 503 DF,  

p-value: < 2.2e-16

 

分析結果の値をそれぞれ見る、値の説明*1は前回の線形回帰で説明した。

 

数値がどうで、どんな判断をするのかよくわかっていない。本には細かく書かれていなく、自分の統計学の知識が足りないため、ここの部分、それぞれの数値がどんな分析結果を導き出せるのかは、後ほど書くことにする。疑問のまま残しておく。

今は、一度いろんな分析方法をまとめることが目的。

 

もろもろ必要なものをダウンロードして、vif()は分散拡大要因を計算するもの。この中でageのp値が高いので取り除いて、回帰を当てはめる

 

プログラム
> install.packages("car")

> install.packages("vctrs")

> install.packages("hms")

> library(car)

 

> vif(lm.fit)
    crim       zn    indus     chas      nox       rm 
1.767486 2.298459 3.987181 1.071168 4.369093 1.912532 
     age      dis      rad      tax  ptratio    lstat 
3.088232 3.954037 7.445301 9.002158 1.797060 2.870777 

 

> lm.fit1 <- lm(medv ~ . - age, data = Boston)
> summary(lm.fit1)

Call:
lm(formula = medv ~ . - age, data = Boston)

Residuals:
     Min       1Q   Median       3Q      Max 
-15.1851  -2.7330  -0.6116   1.8555  26.3838 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  41.525128   4.919684   8.441 3.52e-16 ***
crim         -0.121426   0.032969  -3.683 0.000256 ***
zn            0.046512   0.013766   3.379 0.000785 ***
indus         0.013451   0.062086   0.217 0.828577    
chas          2.852773   0.867912   3.287 0.001085 ** 
nox         -18.485070   3.713714  -4.978 8.91e-07 ***
rm            3.681070   0.411230   8.951  < 2e-16 ***
dis          -1.506777   0.192570  -7.825 3.12e-14 ***
rad           0.287940   0.066627   4.322 1.87e-05 ***
tax          -0.012653   0.003796  -3.333 0.000923 ***
ptratio      -0.934649   0.131653  -7.099 4.39e-12 ***
lstat        -0.547409   0.047669 -11.483  < 2e-16 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.794 on 494 degrees of freedom
Multiple R-squared:  0.7343,    Adjusted R-squared:  0.7284 
F-statistic: 124.1 on 11 and 494 DF,  p-value: < 2.2e-16 

 

ここで何をしているのか?先ほどよりたくさんの係数が増えた。

重回帰分析については、もう少し、理解度をあげて再挑戦しようと思う。

 

 

 

4、終わりに

こちらの本やサイトなどを参考にさせていただきました!