線形回帰モデル
dia.lm <- lm(y~x, data=diabetes)
summary(dia.lm)
Call:
lm(formula = y ~ x, data = diabetes)
Residuals:
Min 1Q Median 3Q Max
-155.829 -38.534 -0.227 37.806 151.355
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 152.133 2.576 59.061 < 2e-16 ***
xage -10.012 59.749 -0.168 0.867000
xsex -239.819 61.222 -3.917 0.000104 ***
xbmi 519.840 66.534 7.813 4.30e-14 ***
xmap 324.390 65.422 4.958 1.02e-06 ***
xtc -792.184 416.684 -1.901 0.057947 .
xldl 476.746 339.035 1.406 0.160389
xhdl 101.045 212.533 0.475 0.634721
xtch 177.064 161.476 1.097 0.273456
xltg 751.279 171.902 4.370 1.56e-05 ***
xglu 67.625 65.984 1.025 0.305998
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 54.15 on 431 degrees of freedom
Multiple R-squared: 0.5177, Adjusted R-squared: 0.5066
F-statistic: 46.27 on 10 and 431 DF, p-value: < 2.2e-16
Ridge回帰モデル
- Ridge回帰モデルとLasso回帰モデルは、
glmnet
パッケージのglmnet()
関数を用いて推定します。
- Ridge回帰モデルは、
glmnet()
関数の引数alpha=0
を指定して推定します。
dia.ridge <- glmnet(diabetes$x, diabetes$y,
alpha=0)
plot(dia.ridge, label=TRUE)

plot(dia.ridge, xvar="lambda", label=TRUE)

- クロスバリデーションによって、最適なλを決定します。
dia.ridge.cv <- cv.glmnet(diabetes$x, diabetes$y,
alpha=0)

- 左側の縦点線が、MSEが最小となるlog(λ)となります。
- Cross-varidated errorの最小値、λの最小値、及びその対数値は以下の通りになります。
[1] 3009.391
[1] 4.516003
log(dia.ridge.cv$lambda.min)
[1] 1.507627
- 選ばれたλを、ペナルティと推定値のグラフに描き入れます。
plot(dia.ridge, xvar="lambda", label=TRUE)
abline(v=log(dia.ridge.cv$lambda.min), lty=2)

- MSEが最小となる時のλに対応するパラメータを出力します。
coef(dia.ridge.cv, s="lambda.min")
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 152.133484
age -1.963374
sex -218.701018
bmi 504.476167
map 309.708936
tc -119.907209
ldl -49.703556
hdl -180.454315
tch 113.546639
ltg 472.886004
glu 80.608255
- MSEが最小となるときのMSEの上側1seとなるときのλに対応するパラメータを出力します。
coef(dia.ridge.cv, s="lambda.1se")
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 152.1334842
age 26.7106843
sex -99.2102956
bmi 333.5263290
map 217.0738406
tc -0.7188819
ldl -39.5932668
hdl -160.6401985
tch 119.7418295
ltg 285.4877726
glu 112.9543267
pred_dia.ridge.cv <- predict(dia.ridge.cv, s="lambda.min", newx=diabetes$x)
head(pred_dia.ridge.cv)
1
[1,] 201.43621
[2,] 72.08768
[3,] 173.52631
[4,] 162.54031
[5,] 128.40638
[6,] 104.37765
Lasso回帰モデル
- Lasso回帰モデルは、
glmnet()
関数の引数alpha=1
を指定して推定します。
dia.lasso <- glmnet(diabetes$x, diabetes$y,
alpha=1)
plot(dia.lasso, label=TRUE)

plot(dia.lasso, xvar="lambda", label=TRUE)

- クロスバリデーションによって、最適なλを決定します。
dia.lasso.cv <- cv.glmnet(diabetes$x, diabetes$y,
alpha=1)

- 左側の縦点線が、MSEが最小となるlog(λ)となります。
- Cross-varidated errorの最小値、λの最小値、及びその対数値は以下の通りになります。
[1] 2986.619
[1] 0.0735996
log(dia.lasso.cv$lambda.min)
[1] -2.609116
- 選ばれたλを、ペナルティと推定値のグラフに描き入れます。
plot(dia.lasso, xvar="lambda", label=TRUE)
abline(v=log(dia.lasso.cv$lambda.min), lty=2)

- MSEが最小となる時のλに対応するパラメータを出力します。
coef(dia.lasso.cv, s="lambda.min")
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 152.13348
age -6.62609
sex -235.98713
bmi 522.13081
map 321.24746
tc -565.68036
ldl 298.49852
hdl .
tch 145.55907
ltg 667.99392
glu 66.80703
- MSEが最小となるときのMSEの上側1seとなるときのλに対応するパラメータを出力します。
coef(dia.lasso.cv, s="lambda.1se")
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 152.133484
age .
sex -82.922210
bmi 511.428467
map 238.119244
tc .
ldl .
hdl -175.401082
tch .
ltg 451.053356
glu 2.612794
pred_dia.lasso.cv <- predict(dia.lasso.cv, s="lambda.min", newx=diabetes$x)
EN回帰モデル
- EN回帰モデルは、
glmnet()
関数の引数alpha
の値を0〜1の間で指定して推定します。ここではalpha=0.5
とします。
dia.EN <- glmnet(diabetes$x, diabetes$y,
alpha=0.5)

plot(dia.EN, xvar="lambda", label=TRUE)

- クロスバリデーションによって、最適なλを決定します。
dia.EN.cv <- cv.glmnet(diabetes$x, diabetes$y,
alpha=0.5)

- 左側の縦点線が、MSEが最小となるlog(λ)となります。
- Cross-varidated errorの最小値、λの最小値、及びその対数値は以下の通りになります。
[1] 2996.299
[1] 1.506629
log(dia.EN.cv$lambda.min)
[1] 0.409875
- 選ばれたλを、ペナルティと推定値のグラフに描き入れます。
plot(dia.EN, xvar="lambda", label=TRUE)
abline(v=log(dia.EN.cv$lambda.min), lty=2)

- MSEが最小となる時のλに対応するパラメータを出力します。
coef(dia.EN.cv, s="lambda.min")
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 152.13348
age .
sex -203.45857
bmi 519.20505
map 300.63375
tc -123.93250
ldl .
hdl -205.28618
tch 30.94044
ltg 510.96600
glu 59.80693
- MSEが最小となるときのMSEの上側1seとなるときのλに対応するパラメータを出力します。
coef(dia.EN.cv, s="lambda.1se")
11 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 152.133484
age .
sex -11.219144
bmi 475.321772
map 201.859709
tc .
ldl .
hdl -132.714852
tch .
ltg 416.987550
glu 4.915767
pred_dia.EN.cv <- predict(dia.EN.cv, s="lambda.min", newx=diabetes$x)
head(pred_dia.EN.cv)
1
[1,] 203.85801
[2,] 70.69643
[3,] 175.32245
[4,] 162.15954
[5,] 127.52535
[6,] 105.15072