【Rによるデータサイエンス】線形回帰分析 〜 線形単回帰分析

【定義】
回帰分析とは。。。

回帰分析とは、説明変数を用いて、目的変数を説明する統計モデルをデータから求めるデータ分析の方法。

回帰分析には2種類あり、
直線関係でモデル化する回帰分析を線形回帰分析と呼ぶ。
非線形関係でモデル化する回帰分析を非線形回帰分析と呼ぶ。

さらに、線形回帰分析には2種類あり、説明変数が1つである単回帰分析、説明変数が複数ある重回帰分析に分けられる。

今回の単回帰分析とは、説明変数x、目的変数yの関係を1次式「y=ax+b」で表すこととする。なお、係数aとbは\sum(y_i-a-bx_i)^2を最小にするa,bを求めればよい。

ケーススタディ
線形回帰分析の関数lmを使用する。

lm(formula, data, weights, subset, na.action)

引数formula:モデルの形式。y=ax+bにしたい場合は、y~xと指定。y=bxにしたい場合は、y~-1+xと指定。
引数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によって求められた線形回帰モデルは次のようになる。
dist=-17.579095+3.932409*speed

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)