Rによる統計的学習入門 〜重回帰分析〜
今回は重回帰分析について、まとめてみる。(未完)
目次
1、重回帰分析って何?〜概要
2、何してるの?〜アルゴリズム
3、例えば?〜分析
4、終わりに
1、重回帰分析って何?〜概要
単回帰分析では一つのYに対して一つのXだったが、重回帰分析ではXが2つ以上。
世の中の原因と結果は大体主な理由が1つのものから来てることの方が少ないかもしれない。大体いくつか原因と結果があるものだ。
2、何してるの?〜アルゴリズム
線形回帰と同じように、係数を最小二乗法で推測していきます。行列代数を使うみたいなので、今回はこの本でも省かれていたので、また今度詳細は書きます。
重回帰を行うときに4つ大切なことがある。
1、X1, X2, X3 ..., Xpの予測変数とYの応答変数の関係
応答変数と予測変数の間に関係があるかどうかはであるかを調べる。
帰無仮説は
対立仮説は、
:のうち少なくとも1つは非零である。
ここではまた、F統計量を計算する。
モデルの仮定が正しければ、
が真ならば、
XとYが関係ないものなら、F値は1に近くなって、が真であるなら、Fは1より大きくなる。
2、予測変数のなかで、重要な、Yをちゃんと説明しているものを選ぶ。
F値を見た後はp値を見る。
少なくとも一つの予測変数が応答変数に関係してる場合、次はどの予測変数が実際に関係しているかを考える。
もし、p=2ならば、
1、どの変数も含まない、
2、X1のみ、
3、X2のみ、
4、X1とX2両方を含むモデル
を考えて、一番良いモデルを選ぶ。その際使われるのは、MallowのCp、赤池情報量基準(AIC)、ベイズ情報量基準(BIC)、そして、自由度調整済みなどがある。pがより大きいものも含めて、これらは後のブログでまた詳しく書く、
3、モデルの当てはめ
モデルの当てはめではRSEとがよく使われる。
が1に近いということはモデルが応答変数の分散のうち多くの部分を説明しているということ。
RSEは重回帰分析だとこの式を使う。
4、予測(3つの不確かなもの)
1、最小二乗法による予測と母回帰との差
式
2、世の中のモデルはだいたい直線ではない
3、もし母回帰がわかっていても、完璧に応答変数を予測することはできない。
以上を踏まえて、分析を行う。
3、例えば?〜分析
本にあるMASSパッケージとISLRパッケージをまず読み込み、
fix()は別ウィンドでデータを表示できる。
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.158Coefficients:
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 ‘ ’ 1Residual 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.3838Coefficients:
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 ‘ ’ 1Residual 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、何してるの?〜アルゴリズム
まずは、
①線形単回帰のモデル式
予測値(ワイハットという、初めて知った時こんな見た目通りの名前に笑った(笑))
推定の切片
推定の傾き
x=入力
次に、
②求め方
とを求めるために最小2乗法(LSM: Least Squares Method)を使う。
i番目のXのデータについて、Yの予測値を
とすると、
i番目の残差はこう表せて、i番目の応答変数の実測値と線形モデルが予測した値との差、残差平方和(RSS:residual sum of squares)を
こう定義する
最小二乗法はRSSを最小化するような推定の切片傾きを選ぶ、つまり偏微分*1することで、求められる。
③評価
今までは、予測をして、式を作っていたが、今度は、真の式との誤差を比べて、どのくらいの精度でこの予測が正しいかを評価する。まず、回帰係数の推定値の精度評価。
切片
傾き
残差
予測の切片と傾きと実際の指揮との誤差を調べていく、
(SE:標準誤差:Standard error)
:Yの観測値の標準偏差
:残差の分散である*2。
:の推定値は残差標準誤差(RSE:residual standard error)
標準誤差は信用区間を求めるのにつかったり、仮説検定、例えば、ここでは帰無仮説と対立仮説でXとYの間に関係があるかないかを検定したりするのに使う。
また、予測の傾きが0から標準語採掘分は慣れているかをt統計量で計算できる。
p値も出てくる。検定の仕方で求め方も少し変わるらしい
統計量(確率変数)がデータから計算した統計量の値より極端な値を取る確率をp値と言う。
p値が小さい→帰無仮説が正しくなさそう。
次に、モデルの精度評価、4つ指標がある。RSE、、相関係数とF値だ。
RSE(残差標準誤差:residual standard error)、モデルがデータに当てはまっていない度合いを図る、小さいと、モデルに当てはまっている
(決定係数:R2 Statistic)、当てはめ度合いを図るもう一つの方法、割合(分散のうち説明されてる部分の割合)
相関係数(correlation)もXとYの間の線形関係の度合いを図る
F統計量
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)これにlm関数を適用させてその結果をansという変数に代入して、
プログラム> ans <- lm(y~x)
> ans
Call:
lm(formula = y ~ x)Coefficients:
(Intercept) x
755.3496 -0.4761すると、こんな感じになる。これから、yの予測式は、
より詳しくはsummary()でできる
プログラム> s.ans <- summary(ans)
> s.ansCall:
lm(formula = y ~ x)Residuals:
Min 1Q Median 3Q Max
-75.143 -26.590 4.033 31.998 48.461Coefficients:
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 ‘ ’ 1Residual 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:決定係数
Residual standard error:誤差こうの標準偏差の推定値
F-statistic:統計量 on 自由度1 and 自由度2 で表記される。DFはdegrees of freedom(自由度)の略*5
最後に回帰直線を赤くみやすくつけてあげて、プロット
プログラム> abline(ans, lwd = 3, col = "red")
分析の後には、検証のターンが最後にある。
試しに出てきた直線に新しくデータを持ってきて、それがどれだけズレがあるかで、この直線の分析器はどのくらい正しいかを判定する。
4、終わりに
かなりの部分をいろんなサイトから拝借したものを使ったので、著作権とかがわからないので、少し心配ですが、なんとか形にすることができた。この調子で全部読んだ本をまとめて行く。
こちらの本やサイトなどを参考にさせていただきました!
式など*6
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)
このクオリティでもかなり拘っていて、時間がかなりかかって、効率をもう少し重視したいため、もっと簡潔にまとめることとする。