R の caret パッケージメモ~train:caret 一般化線形モデル~

スポンサーリンク

R で "caret" パッケージを使用する際の備忘録です。
今回は "train関数" を使用して一般化線形モデルで回帰分析を行います。

使用するデータ

使用するデータは "Titanic" です。
沈没したタイタニック号の生存者数を「性別」「年齢」「等級」ごとに分類したデータです。

データの下準備

いつも通り、"caret" パッケージをライブラリ化します。

また、"Titanic" のデータはそのままでは使いづらいため、テーブル変換用の関数を使って使いやすい形に変換します。

> install.packages("caret")
> library(caret)
> install.packages("epitools") #テーブル変換関数のパッケージ
> library(epitools)

> Titanic1 <- expand.table(Titanic) #テーブル変換
> head(Titanic1)
Class Sex Age Survived
1 1st Male Child Yes
2 1st Male Child Yes
3 1st Male Child Yes
4 1st Male Child Yes
5 1st Male Child Yes
6 1st Male Adult No

train関数でglmを実行

一般化線形モデルを指定するメソッドは "glm" です。
一般化線形モデルはパラメータ調整が必要ないため、コードは以下の通りとなります。
ロジスティック回帰分析を行うため、family は「二項分布 "binomial()"」を指定します。

titanic.glm <- train(
data = Titanic1,
Survived ~ Sex + Age + Class,
method = "glm",
family = binomial())
<以下省略>

 

Accuracy は約78%ということでボチボチかなと思います。

> titanic.glm
Generalized Linear Model
2201 samples
3 predictor
2 classes: 'No', 'Yes'
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 2201, 2201, 2201, 2201, 2201, 2201, ...
Resampling results:
Accuracy Kappa
0.7772942 0.4447814

 

summary関数を使ったあとは、普通の glm関数と同じですね。

> summary(titanic.glm)
Call:
NULL
Deviance Residuals: 
Min 1Q Median 3Q Max 
-2.0812 -0.7149 -0.6656 0.6858 2.1278
Coefficients:
Estimate Std. Error z value Pr(>|z|) 
(Intercept) 0.6853 0.2730 2.510 0.0121 * 
SexFemale 2.4201 0.1404 17.236 < 2e-16 ***
AgeAdult -1.0615 0.2440 -4.350 1.36e-05 ***
Class2nd -1.0181 0.1960 -5.194 2.05e-07 ***
Class3rd -1.7778 0.1716 -10.362 < 2e-16 ***
ClassCrew -0.8577 0.1573 -5.451 5.00e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 2769.5 on 2200 degrees of freedom
Residual deviance: 2210.1 on 2195 degrees of freedom
AIC: 2222.1
Number of Fisher Scoring iterations: 4

メソッドで "glmStepAIC" を選択する

メソッドで "glmStepAIC" を選択すると、AIC (赤池情報量規準) に基づいて変数選択を行い、最適なモデルを構築してくれるので便利です。

titanic.glm <- train(
data = Titanic1,
Survived ~ Sex + Age + Class,
method = "glmStepAIC", #AICに基づきモデル構築
family = binomial())
<以下省略>