【Rによるデータサイエンス】線形回帰分析 〜 線形単回帰分析
【定義】
回帰分析とは。。。
回帰分析とは、説明変数を用いて、目的変数を説明する統計モデルをデータから求めるデータ分析の方法。
回帰分析には2種類あり、
直線関係でモデル化する回帰分析を線形回帰分析と呼ぶ。
非線形関係でモデル化する回帰分析を非線形回帰分析と呼ぶ。
さらに、線形回帰分析には2種類あり、説明変数が1つである単回帰分析、説明変数が複数ある重回帰分析に分けられる。
今回の単回帰分析とは、説明変数x、目的変数yの関係を1次式「y=ax+b」で表すこととする。なお、係数aとbはを最小にするa,bを求めればよい。
◎ケーススタディ
線形回帰分析の関数lmを使用する。
lm(formula, data, weights, subset, na.action)
引数formula:モデルの形式。にしたい場合は、と指定。にしたい場合は、と指定。
引数data:回帰分析に用いるデータセットの名前
引数weights:使用する説明変数に指定する重み
引数subset:データセットの1部分を使用する際に指定する1部分の範囲。指定しない場合は全てのデータを使用する。
引数na.action:欠損値扱いを指定する引数。指定しない場合は、欠損値のデータを除いたデータを用いて計算を行う。
さて、Rにデフォルトで用意されている、車の速度とブレーキをかけた後に車が止まるまでの距離に関するデータcarsを使用してケーススタディを行う。
> colnames(cars) [1] "speed" "dist" > cars speed dist 1 4 2 2 4 10 3 7 4 4 7 22 5 8 16 6 9 10 7 10 18 8 10 26
データcarsを可視化する。
> plot(cars)
可視化した散布図を見ると線形関係がありそう。
相関係数を調べてみる。
> cor(cars$speed,cars$dist) [1] 0.8068949
相関係数は凡そ0.8で、この精度で線形関係がある。
そこで、carsデータの距離distと速度speedの間には線形関係があると仮定して、線形回帰分析を行う。
> cars.lm<-lm(dist~speed,data=cars) > summary(cars.lm) Call: lm(formula = dist ~ speed, data = cars) Residuals: Min 1Q Median 3Q Max -29.069 -9.525 -2.272 9.215 43.201 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -17.5791 6.7584 -2.601 0.0123 * speed 3.9324 0.4155 9.464 1.49e-12 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 15.38 on 48 degrees of freedom Multiple R-squared: 0.6511, Adjusted R-squared: 0.6438 F-statistic: 89.57 on 1 and 48 DF, p-value: 1.49e-12
結果について1つ1つ見ていこう。
1.Residuals(残差)
残差は次で求まる。
> residuals(cars.lm) 1 2 3 4 5 6 7 3.849460 11.849460 -5.947766 12.052234 2.119825 -7.812584 -3.744993 8 9 10 11 12 13 14 4.255007 12.255007 -8.677401 2.322599 -15.609810 -9.609810 -5.609810 15 16 17 18 19 20 21 -1.609810 -7.542219 0.457781 0.457781 12.457781 -11.474628 -1.474628 22 23 24 25 26 27 28 22.525372 42.525372 -21.407036 -15.407036 12.592964 -13.339445 -5.339445 29 30 31 32 33 34 35 -17.271854 -9.271854 0.728146 -11.204263 2.795737 22.795737 30.795737 36 37 38 39 40 41 42 -21.136672 -11.136672 10.863328 -29.069080 -13.069080 -9.069080 -5.069080 43 44 45 46 47 48 49 2.930920 -2.933898 -18.866307 -6.798715 15.201285 16.201285 43.201285 50 4.268876
50個のcarsデータセットに対して、残差が全て求まる。
summary(cars.lm)の結果には、残差の最小値(Min)、第1四分位数(1Q)、中央値(Median)、第2四分位数(3Q)、最大値(Max)が表示されている。
実際、次のようにして確認できる。
> min(residuals(cars.lm)) [1] -29.06908 > median(residuals(cars.lm)) [1] -2.271854 > max(residuals(cars.lm)) [1] 43.20128
2.Coefficients(係数)
回帰係数は、残差の2乗和を最小化する連立方程式の解である。
y=ax+bと仮定した線形モデルの係数a、bは次のように回帰係数として求まる。
(Intercept)がbに相当し、speedがaに相当する。
> cars.lm$coefficients (Intercept) speed -17.579095 3.932409
線形回帰関数lmによって求められた線形回帰モデルは次のようになる。
3.標準誤差
標準誤差、t値、p値はsummary関数の実行結果として表示されている。
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -17.5791 6.7584 -2.601 0.0123 * speed 3.9324 0.4155 9.464 1.49e-12 ***
t値およびp値は係数が回帰モデルへ役立っているかに関する統計量であり、p値が大きいほど、その係数が役立っていない。
今回の場合は、いずれも0.013以下で、十分小さい。
4.決定係数(Multiple R-squared)と調整済み決定係数(Adjusted R-squared)
決定係数とは、回帰モデルがどの程度データにフィットしているかを評価する指標。
決定係数と調整済み決定係数が1に近づくほど回帰モデル(直線)がデータによくフィットしていることになる。
5.予測値
回帰式で計算される値を予測値と呼ぶ。
予測値を計算するには関数predictを使用する。
> cars.predict<-predict(cars.lm) > cars.resi<-residuals(cars.lm) > data.frame(cars,cars.predict,cars.resi) speed dist cars.predict cars.resi 1 4 2 -1.849460 3.849460 2 4 10 -1.849460 11.849460 3 7 4 9.947766 -5.947766 4 7 22 9.947766 12.052234
6.線形回帰式の可視化
plotとablineを使用してグラフ化する。
7.残差の可視化
画面を 2 × 2 に分割して、残差に関するグラフを作成する。
> par(mfrow=c(2,2)) > plot(cars.lm)