3.6 変数選択
以前紹介したようにstep
関数を使ってAICの意味で良い変数を選択することができる.
fit_none <- glm(Diagnosis ~ 1, data=scaled_df, family=binomial)
fit_full <- glm(Diagnosis ~ ., data=scaled_df, family=binomial)
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Start: AIC=753.44
## Diagnosis ~ 1
##
## Df Deviance AIC
## + Nconcave_mean 1 258.92 262.92
## + Perimeter_mean 1 304.48 308.48
## + Area_mean 1 325.66 329.66
## + Radius_mean 1 330.01 334.01
## + Concavity_mean 1 383.23 387.23
## + Compactness_mean 1 508.79 512.79
## + Texture_mean 1 646.52 650.52
## + Smoothness_mean 1 673.95 677.95
## + Symmetry_mean 1 686.80 690.80
## <none> 751.44 753.44
## + Fractaldim_mean 1 751.35 755.35
##
## Step: AIC=262.92
## Diagnosis ~ Nconcave_mean
##
## Df Deviance AIC
## + Texture_mean 1 203.34 209.34
## + Area_mean 1 205.78 211.78
## + Radius_mean 1 209.24 215.24
## + Perimeter_mean 1 209.64 215.64
## + Fractaldim_mean 1 223.42 229.42
## + Smoothness_mean 1 241.45 247.45
## + Compactness_mean 1 242.21 248.21
## + Symmetry_mean 1 253.88 259.88
## + Concavity_mean 1 256.58 262.58
## <none> 258.92 262.92
## - Nconcave_mean 1 751.44 753.44
##
## Step: AIC=209.34
## Diagnosis ~ Nconcave_mean + Texture_mean
##
## Df Deviance AIC
## + Area_mean 1 161.70 169.70
## + Radius_mean 1 164.38 172.38
## + Perimeter_mean 1 165.71 173.71
## + Fractaldim_mean 1 176.95 184.95
## + Compactness_mean 1 187.97 195.97
## + Concavity_mean 1 198.18 206.18
## + Smoothness_mean 1 198.46 206.46
## <none> 203.34 209.34
## + Symmetry_mean 1 202.15 210.15
## - Texture_mean 1 258.92 262.92
## - Nconcave_mean 1 646.52 650.52
##
## Step: AIC=169.7
## Diagnosis ~ Nconcave_mean + Texture_mean + Area_mean
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Df Deviance AIC
## + Perimeter_mean 1 156.26 166.26
## + Smoothness_mean 1 156.44 166.44
## + Radius_mean 1 157.39 167.39
## + Symmetry_mean 1 157.81 167.81
## <none> 161.70 169.70
## + Compactness_mean 1 160.95 170.95
## + Fractaldim_mean 1 161.64 171.64
## + Concavity_mean 1 161.64 171.64
## - Area_mean 1 203.34 209.34
## - Texture_mean 1 205.78 211.78
## - Nconcave_mean 1 288.98 294.98
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
##
## Step: AIC=166.26
## Diagnosis ~ Nconcave_mean + Texture_mean + Area_mean + Perimeter_mean
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Df Deviance AIC
## + Smoothness_mean 1 151.16 163.16
## + Symmetry_mean 1 152.53 164.53
## <none> 156.26 166.26
## + Compactness_mean 1 156.03 168.03
## + Radius_mean 1 156.22 168.22
## + Fractaldim_mean 1 156.25 168.25
## + Concavity_mean 1 156.26 168.26
## - Perimeter_mean 1 161.70 169.70
## - Area_mean 1 165.71 173.71
## - Texture_mean 1 202.30 210.30
## - Nconcave_mean 1 252.44 260.44
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
##
## Step: AIC=163.16
## Diagnosis ~ Nconcave_mean + Texture_mean + Area_mean + Perimeter_mean +
## Smoothness_mean
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Df Deviance AIC
## + Symmetry_mean 1 148.06 162.06
## <none> 151.16 163.16
## + Concavity_mean 1 149.52 163.52
## + Radius_mean 1 150.37 164.37
## + Compactness_mean 1 150.87 164.87
## + Fractaldim_mean 1 151.14 165.14
## - Smoothness_mean 1 156.26 166.26
## - Perimeter_mean 1 156.44 166.44
## - Area_mean 1 161.69 171.69
## - Nconcave_mean 1 181.21 191.21
## - Texture_mean 1 202.05 212.05
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
##
## Step: AIC=162.06
## Diagnosis ~ Nconcave_mean + Texture_mean + Area_mean + Perimeter_mean +
## Smoothness_mean + Symmetry_mean
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Warning: glm.fit: 数値的に 0 か 1 である確率が生じました
## Df Deviance AIC
## <none> 148.06 162.06
## - Symmetry_mean 1 151.16 163.16
## + Concavity_mean 1 147.29 163.29
## + Radius_mean 1 147.74 163.74
## + Fractaldim_mean 1 148.03 164.03
## + Compactness_mean 1 148.05 164.05
## - Smoothness_mean 1 152.53 164.53
## - Perimeter_mean 1 153.44 165.44
## - Area_mean 1 159.18 171.18
## - Nconcave_mean 1 174.34 186.34
## - Texture_mean 1 200.47 212.47
##
## Call: glm(formula = Diagnosis ~ Nconcave_mean + Texture_mean + Area_mean +
## Perimeter_mean + Smoothness_mean + Symmetry_mean, family = binomial,
## data = scaled_df)
##
## Coefficients:
## (Intercept) Nconcave_mean Texture_mean
## 0.3531 3.5639 1.6723
## Area_mean Perimeter_mean Smoothness_mean
## 12.6985 -8.1320 0.7039
## Symmetry_mean
## 0.4922
##
## Degrees of Freedom: 568 Total (i.e. Null); 562 Residual
## Null Deviance: 751.4
## Residual Deviance: 148.1 AIC: 162.1
実行した結果
警告: glm.fit: fitted probabilities numerically 0 or 1 occurred
と警告が出るケースがあるが,これはロジスティック回帰においてモデルが過学習しているような状態になっているために出る警告である.パラメーターの推定そのものが失敗しているわけではないが,この場合は推定結果を注意深くみて何かほぼ目的変数と同じような説明変数が存在していないか確認する必要がある.
pairs
関数を使ってみてみよう.
結果として,
- Perimeter_mean
- Area_mean
- Concavity_mean
- Nconcave_mean
の相関がかなり高いことが分かる.試しに,これらの変数を取り除いて実行してみよう.
fit_none <- glm(Diagnosis ~ 1, data=newdata, family=binomial)
fit_full <- glm(Diagnosis ~ ., data=newdata, family=binomial)
result <- stats::step(object=fit_none, scope=list(lower=fit_none, upper=fit_full))
## Start: AIC=753.44
## Diagnosis ~ 1
##
## Df Deviance AIC
## + Nconcave_mean 1 258.92 262.92
## + Radius_mean 1 330.01 334.01
## + Compactness_mean 1 508.79 512.79
## + Texture_mean 1 646.52 650.52
## + Smoothness_mean 1 673.95 677.95
## + Symmetry_mean 1 686.80 690.80
## <none> 751.44 753.44
## + Fractaldim_mean 1 751.35 755.35
##
## Step: AIC=262.92
## Diagnosis ~ Nconcave_mean
##
## Df Deviance AIC
## + Texture_mean 1 203.34 209.34
## + Radius_mean 1 209.24 215.24
## + Fractaldim_mean 1 223.42 229.42
## + Smoothness_mean 1 241.45 247.45
## + Compactness_mean 1 242.21 248.21
## + Symmetry_mean 1 253.88 259.88
## <none> 258.92 262.92
## - Nconcave_mean 1 751.44 753.44
##
## Step: AIC=209.34
## Diagnosis ~ Nconcave_mean + Texture_mean
##
## Df Deviance AIC
## + Radius_mean 1 164.38 172.38
## + Fractaldim_mean 1 176.95 184.95
## + Compactness_mean 1 187.97 195.97
## + Smoothness_mean 1 198.46 206.46
## <none> 203.34 209.34
## + Symmetry_mean 1 202.15 210.15
## - Texture_mean 1 258.92 262.92
## - Nconcave_mean 1 646.52 650.52
##
## Step: AIC=172.38
## Diagnosis ~ Nconcave_mean + Texture_mean + Radius_mean
##
## Df Deviance AIC
## + Smoothness_mean 1 160.32 170.32
## + Symmetry_mean 1 160.65 170.65
## <none> 164.38 172.38
## + Compactness_mean 1 163.26 173.26
## + Fractaldim_mean 1 164.17 174.17
## - Radius_mean 1 203.34 209.34
## - Texture_mean 1 209.24 215.24
## - Nconcave_mean 1 291.12 297.12
##
## Step: AIC=170.32
## Diagnosis ~ Nconcave_mean + Texture_mean + Radius_mean + Smoothness_mean
##
## Df Deviance AIC
## + Symmetry_mean 1 157.38 169.38
## <none> 160.32 170.32
## + Compactness_mean 1 159.21 171.21
## + Fractaldim_mean 1 159.90 171.90
## - Smoothness_mean 1 164.38 172.38
## - Nconcave_mean 1 187.29 195.29
## - Radius_mean 1 198.46 206.46
## - Texture_mean 1 209.16 217.16
##
## Step: AIC=169.38
## Diagnosis ~ Nconcave_mean + Texture_mean + Radius_mean + Smoothness_mean +
## Symmetry_mean
##
## Df Deviance AIC
## + Compactness_mean 1 155.28 169.28
## <none> 157.38 169.38
## - Symmetry_mean 1 160.32 170.32
## + Fractaldim_mean 1 156.64 170.64
## - Smoothness_mean 1 160.65 170.65
## - Nconcave_mean 1 179.65 189.65
## - Radius_mean 1 198.27 208.27
## - Texture_mean 1 207.68 217.68
##
## Step: AIC=169.28
## Diagnosis ~ Nconcave_mean + Texture_mean + Radius_mean + Smoothness_mean +
## Symmetry_mean + Compactness_mean
##
## Df Deviance AIC
## <none> 155.28 169.28
## - Compactness_mean 1 157.38 169.38
## - Smoothness_mean 1 158.24 170.24
## + Fractaldim_mean 1 155.04 171.04
## - Symmetry_mean 1 159.21 171.21
## - Nconcave_mean 1 176.38 188.38
## - Radius_mean 1 186.89 198.89
## - Texture_mean 1 207.08 219.08
先ほどの警告は解消された. 最終的には以下のようなモデルがAICの意味で最適であるとして進めていこう.
Call: glm(formula = Diagnosis ~ Nconcave_mean + Texture_mean + Radius_mean +
Smoothness_mean + Symmetry_mean + Compactness_mean, family = binomial,
data = newdata)