【Rによるデータサイエンス】非線形回帰分析 〜 加法モデル

◎定義
加法回帰モデル(additive regression model)とは。。。

y=a+f_{1}(x_{1})+f_{2}(x_{2})+\cdots+f_{i}(x_{i})+\cdots+f_{n}(x_{n})+\epsilon

・線形回帰モデルおよび関数nlsによる非線形回帰モデルは、加法モデルの特殊なケースと考えられる。
f_{i}が全て線形関数の場合は、線形回帰モデルとなる。

一般化線形モデルを加法モデル化したとき、一般化加法モデル(GAM:Generalized Additive Model)と呼ぶ。

Rで一般化加法モデルの関数gamを使うには、パッケージmgcvをダウンロードすれば良い。

ケーススタディ
パッケージmgcvのダウンロードと読み込み。

> install.packages("mgcv");library(mgcv)

一般化加法モデルの適用。

> airq2<-na.exclude(airquality[,1:4]) #欠損値を取り除く
> airq.gam<-gam(Ozone~s(Solar.R)+s(Wind)+s(Temp),data=airq2) #関数gamの実行。全ての説明変数に平滑化スプライン(s)をリンクしている。
> summary(airq.gam)

Family: gaussian 
Link function: identity 

Formula:
Ozone ~ s(Solar.R) + s(Wind) + s(Temp)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   42.099      1.663   25.32   <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
             edf Ref.df      F  p-value    
s(Solar.R) 2.760  3.447  3.826   0.0093 ** 
s(Wind)    2.910  3.657 13.695 1.66e-08 ***
s(Temp)    3.833  4.753 11.769 7.40e-09 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.723   Deviance explained = 74.7%
GCV score =  338.9  Scale est. = 306.83    n = 111

◎考察
一般化加法モデル(GAM)と、一般化線形モデル(GLM)を比較する。
まず一般化線形モデルの結果を用意する。

> airq.glm<-glm(Ozone~Solar.R+Wind+Temp,data=airq2)
> summary(airq.glm)

Call:
glm(formula = Ozone ~ Solar.R + Wind + Temp, data = airq2)

Deviance 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

(Dispersion parameter for gaussian family taken to be 448.6242)

    Null deviance: 121802  on 110  degrees of freedom
Residual deviance:  48003  on 107  degrees of freedom
AIC: 998.72

Number of Fisher Scoring iterations: 2

AICを計算して、GAMとGLMの精度の比較を行う。

> AIC(airq.gam)
[1] 962.596
> AIC(airq.glm)
[1] 998.7171

GAMの方が精度が良いことが分かる。