2017-11-21

Rで重回帰分析 オゾン濃度と気象データの関係を重回帰分析して予測する

この本のコードを写経しています。

手を動かしながら学ぶ ビジネスに活かすデータマイニング
技術評論社 (2014-08-22)
売り上げランキン



Rのデフォルトで存在するデータセットを使って、重回帰分析をしてみたいと思います。

重回帰分析は複数の説明変数x_{i}(i=1, 2, 3, ・・・)を用いて目的変数yを表す回帰式を算出することです。例えば、次のようなデータについて考えてみます。27-2. 重回帰分析 | 統計学の時間 | 統計WEB  

データセットはRにデフォルトに存在する、airqualityというものを利用します。

lm.py

> data("airquality") #データセットの読み込み

> head(airquality) # データセットの先頭行を取得
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

これで、

  • Ozoneオゾン層
  • Solar.R:日照強度
  • Wind:風速
  • Temp:気温
  • Month:月
  • Day:日

のデータセットが取得できます。これらの値から、Ozone層を予測するモデルを作成します。Month、Dayの値は必要ないので、除外します。


lm.r

>  airq <- airquality[, 1: 4] # 月・日付 の データ を 外す(1-4列目のみ取得する)
> head(airq) #先頭行を取得

  Ozone Solar.R Wind Temp
1    41     190  7.4   67
2    36     118  8.0   72
3    12     149 12.6   74
4    18     313 11.5   62
5    NA      NA 14.3   56
6    28      NA 14.9   66

さて、今度はOzone層を目的変数に、そのほかを従属変数にして、予測してみます。

lm.r

> airq.lm <- lm(Ozone~., airq) #重回帰式を作成
> summary(airq.lm) #統計量を表示する

Call:
lm(formula = Ozone ~ ., data = airq)

Residuals:
    Min      1Q  Median      3Q     Max
-40.485 -14.219  -3.551  10.097  95.619

Coefficients:
             Estimate Std. Error t value Pr(>|t|)   
(Intercept) -64.34208   23.05472  -2.791  0.00623 **
Solar.R       0.05982    0.02319   2.580  0.01124 * 
Wind         -3.33359    0.65441  -5.094 1.52e-06 ***
Temp          1.65209    0.25353   6.516 2.42e-09 ***
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

Residual standard error: 21.18 on 107 degrees of freedom
  (42 observations deleted due to missingness)
Multiple R-squared:  0.6059,    Adjusted R-squared:  0.5948
F-statistic: 54.83 on 3 and 107 DF,  p-value: < 2.2e-16

用語の確認です。

  • 切片(Intercept):定数項
  • 変動係数(Coefficients)
  • 標準誤差(Std Error)
  • 偏回帰係数(Estimate)
  • t値(Error t value)
  • p値(Pr(>|t|))
  • R二乗値(Multiple R-squared)
  • 調整済みR二乗値(Adjusted R-squared)

上の偏回帰係数の結果だと、


  1. Solar.R 0.05982
  2. Wind         -3.33359 
  3. Temp          1.65209

なので、「(1)日照強度と(3)気温が上がるほど、オゾン濃度がまし、(2)風速が上がるほどオゾン濃度が下がる」といえる。p値も5%水準で有意。

疑問点

  • 標準誤差とt値はなんのために存在するのか
    • 重回帰分析の裏側でt検定と同じ仕組みが使われているため です。
  • 標準誤差はなんのために存在する?
理論的なところはいったん置いておきます。(わからなすぎ)


手を動かしながら学ぶ ビジネスに活かすデータマイニング
技術評論社 (2014-08-22)
売り上げランキング: 98,606

注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...