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、終わりに

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

 

 

統計的学習入門を読んで自分なりにまとめてみた〜パート2〜線形回帰

今回は線形回帰分析について、まとめてみる。

 

目次

1、線形回帰って何?〜概要

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

3、例えば?どう使う?〜分析、検証

4、終わりに

 

1、線形回帰って何?〜概要

 

線形回帰(単回帰分析)はデータに線を引いて、傾向みたり、線の上にあるか下にあるかみるもの。教師あり学習

2つのものを比べて、一個大きくなったらもう一個は大きくなるのか小さくなるのか、その度合いで、2つのものがどれだけ関係があるのか、どんな関係性なのかを調べる方法。そして、その線をたどったら、1つわかるともう1つもだいたいわかるから未来予知に使える。

 

 

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

まずは、

①線形単回帰のモデル式

{\widehat{y}=\widehat{\beta }_{0}+\widehat{\beta }_{1} x }

{\widehat{y}=}予測値(ワイハットという、初めて知った時こんな見た目通りの名前に笑った(笑))

{\widehat{\beta }_{0}= }推定の切片

{\widehat{\beta }_{1}= }推定の傾き

x=入力

 

次に、

②求め方

{\widehat{\beta }_{0} }{\widehat{\beta }_{1} }を求めるために最小2乗法(LSM: Least Squares Method)を使う。

 

i番目のXのデータについて、Yの予測値を

{ \hat{y}_{i}=\hat{\beta}_{0}+\hat{\beta}_{1} x_{i} } とすると、

{e_{i}=y-\widehat{y} } i番目の残差はこう表せて、i番目の応答変数の実測値と線形モデルが予測した値との差、残差平方和(RSS:residual sum of squares)を

{ \mathrm{RSS}=e_{1}^{2}+e_{2}^{2}+\cdots+e_{n}^{2} }

こう定義する

{ \mathrm{RSS}=\left(y_{1}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{1}\right)^{2}+\left(y_{2}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{2}\right)^{2}+\cdots+\left(y_{n}-\hat{\beta}_{0}-\hat{\beta}_{1} x_{n}\right)^{2}  }

最小二乗法はRSSを最小化するような推定の切片傾きを選ぶ、つまり偏微分*1することで、求められる。

{ \hat{\beta}_{1}=\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(y_{i}-\bar{y}\right)}{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}} }

{ \hat{\beta}_{0}=\bar{y}-\hat{\beta}_{1} \bar{x} }

 

 

③評価

今までは、予測をして、式を作っていたが、今度は、真の式との誤差を比べて、どのくらいの精度でこの予測が正しいかを評価する。まず、回帰係数の推定値の精度評価。

{ y=\beta _{0}+\beta_{1} X+\varepsilon }

 

{ \beta _{0}=}切片

{ \beta_{1} =}傾き

{ \varepsilon =}残差

 

予測の切片と傾きと実際の指揮との誤差を調べていく、

 

f:id:song15song1:20211007081652p:plain

 

(SE:標準誤差:Standard error)

{ \sigma } :Yの観測値の標準偏差

{ \sigma^{2}=\operatorname{Var}(\epsilon) } :残差{ \varepsilon }の分散である*2

{ \sigma } :の推定値は残差標準誤差(RSE:residual standard error)

{ \mathrm{RSE}=\sqrt{\mathrm{RSS} /(n-2)} }

 

標準誤差は信用区間を求めるのにつかったり、仮説検定、例えば、ここでは帰無仮説と対立仮説でXとYの間に関係があるかないかを検定したりするのに使う。

 

また、予測の傾きが0から標準語採掘分は慣れているかをt統計量で計算できる。

{ t=\frac{\hat{\beta}_{1}-0}{\operatorname{SE}\left(\hat{\beta}_{1}\right)} }

 

p値も出てくる。検定の仕方で求め方も少し変わるらしい

統計量(確率変数)がデータから計算した統計量の値より極端な値を取る確率をp値と言う。

p値が小さい→帰無仮説が正しくなさそう。

*3

 

 

{  }

次に、モデルの精度評価、4つ指標がある。RSE、{ R^{2} }相関係数F値だ。

 

 

RSE(残差標準誤差:residual standard error)、モデルがデータに当てはまっていない度合いを図る、小さいと、モデルに当てはまっている

f:id:song15song1:20211015061944p:plain


 

{ R^{2} } (決定係数:R2 Statistic、当てはめ度合いを図るもう一つの方法、割合(分散のうち説明されてる部分の割合)

f:id:song15song1:20211015062233p:plain

相関係数correlation)もXとYの間の線形関係の度合いを図る

f:id:song15song1:20211015062302p:plain

F統計量

F値は説明分散/非説明分散で計算され、大きければ大きい程、その回帰モデルは信頼できることを示す。

*4 

 

3、例えば?どう使う?〜分析、検証

アイスクリーム屋さんのブログ(ブログ下の参照欄)からデータを拝借させていただいて、自分でもRで分析してみた

 

店舗別の平均客数データ(12店舗)【1章4節のデータ】

店舗
駅からの距離(m)
平均客数
1
10
795
2
1200
213
3
500
465
4
50
694
5
740
403
6
30
782
7
10
769
8
360
561
9
150
692
10
930
361
11
620
385
12
65
723

 

まず、xを駅からの距離(m)として、yを平均客数とする。

xとyの値を代入して

 

プログラム
> y <- c(795,213,465,694,403,782,769,561,692,361,385,723)
> x <- c(10,1200,500,50,740,30,10,360,150,930,620,65)
> plot(x,y)

f:id:song15song1:20210923153557p:plain

 

これにlm関数を適用させてその結果をansという変数に代入して、

プログラム
> ans <- lm(y~x)

> ans

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x  
   755.3496      -0.4761  

すると、こんな感じになる。これから、yの予測式は、

{ y=\755.349+\-0.4761 X }

 

より詳しくはsummary()でできる

プログラム

> s.ans <- summary(ans)
> s.ans

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-75.143 -26.590   4.033  31.998  48.461 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 755.34960   17.06123   44.27 8.31e-13 ***
x            -0.47614    0.03095  -15.38 2.74e-08 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 41.9 on 10 degrees of freedom
Multiple R-squared:  0.9595,    

Adjusted R-squared:  0.9554 
F-statistic: 236.7 on 1 and 10 DF,  

p-value: 2.74e-08

Estimate:今回の回帰分析における回帰係数の推定値

(Intercept):切片(定数項)

Std. Error:各回帰係数の推定量の標準誤差

t value:T値

Pr(>|t|) :P値

Adjusted R-squared:自由度修正済み決定係数

Multiple R-squared:決定係数{ R^{2} }

Residual standard error:誤差こうの標準偏差の推定値

F-statistic:統計量 on 自由度1 and 自由度2 で表記される。DFはdegrees of freedom(自由度)の略*5


 

最後に回帰直線を赤くみやすくつけてあげて、プロット

プログラム
> abline(ans, lwd = 3, col = "red")

f:id:song15song1:20210923154121p:plain

分析の後には、検証のターンが最後にある。

試しに出てきた直線に新しくデータを持ってきて、それがどれだけズレがあるかで、この直線の分析器はどのくらい正しいかを判定する。

 

 

 

 

4、終わりに

 

かなりの部分をいろんなサイトから拝借したものを使ったので、著作権とかがわからないので、少し心配ですが、なんとか形にすることができた。この調子で全部読んだ本をまとめて行く。

 

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

式など*6

 

webdemo.myscript.com

cartman0.hatenablog.com

kogolab.chillout.jp

*1:

*1

www.youtube.com

*2:厳密には、以下の指揮がなりつつためにはそれぞれの観測値の誤差εiの間に相関がなく、共通の分散として、シグマ二乗を持つことが必要

*3:manabitimes.jp

*4:www.cbs-j.com

*5:統計検定のための、Rの出力結果からわかること(回帰分析編) - Qiita

*6:www.amazon.co.jp

Rによる統計的学習入門を読んで自分なりにまとめてみた

 

初めまして、今回は自分の知識の定着を目的としたブログになります。

 

統計的学習入門(An Introduction to Statistical Learning with Applications in R)を読んで、分析でのいろんなツールで何をやっているのかを整理したかったから、書くことにしました。

分析とは、回帰、分類、クラスタリングと次元削減の4つが主に行われているのかなと今のところは思っています。

 

本書で紹介されていたものをRを使って、自分で分析するところまでやりたい。つまり、実際のデータを持ってきて、問題提起、分析をして結論を出す。言語はRと後々Pythonも追加したい。

 

3章 線形回帰、線形重回帰、

4章 ロジスティック回帰、線形判別分析、2時判別分析、K最近傍法

5章 ホールドアウト検証、1つ抜き交差検証、k分割交差検証、ブーストラップ

6章 1)部分集合選択法(最良部分集合選択、変数増加法と変数減少法、ホールドアウト検証法と交差検証法、2)縮小推定(リッジ回帰、Lasso)3、次元削減(主成分分析、部分最小2乗法)

7章 多項式回帰、階段関数、スプライン、一般化加法モデル

8章 決定木(回帰、分類、バギングとランダムフォレスト)

9章 サポートベクターマシン(分類機、ROC曲線、多クラスの場合におけるSVM)

10章 Deeplearning、ニューラルネットワーク、CNN、IMDb、RNN

12章 K-MeansClusterint, HierarchicalClustering, PracticalissuesinClustering

13章 教師なし学習 (主成分分析ークラスタリング(K平均クラスタリングー階層的スラスタリング)

 

これら訳37個を、1、概要分析方の解説、2、何をしているのか、アルゴリズムの復習、注意点、3、Rを使い、実際に分析する。という順番にまとめていこうと思う。基本的に、章末にある実習でRを使って実際に分析に使われているものをまとめていく、また、章の問題で複雑に感じるものは随時追加していくので、初めはさっぱりさせるつもりである。

 

随時、見易さだったりを考慮して、パートに分けたり、していくのはもちろん、英語中国語のサイトも作り次第、ブログにリンクを載せようと思う。当分先の話かもしれない。

 

ちなみに、このブログを書いている者は、現在サンフランシスコの統計学部3年生で23歳の男性である。

 

指摘はいつでも大歓迎なので、ぜひメッセージしてください。

 

*追記1

機械学習おすすめ書籍 | 必読の1冊 『Rによる統計的学習入門(ISL)』
https://totadata.com/book_islr/

こちらのサイトがすごく参考になりそうなので、迷惑にならないようなレベルで参考にさせてもらいます!
多分、UIとか内容の質が全く格が違うから、あくまで自分の思考の生理用のブログということで、おそらく問題にはならない(なれない)ような気がします。

 

*追記2(2021/10/06)

このクオリティでもかなり拘っていて、時間がかなりかかって、効率をもう少し重視したいため、もっと簡潔にまとめることとする。