車の燃費データを使って回帰分析する。
単位はオリジナル(出典参照)から馴染みのあるものに変換した。
出典:【UCI Machine Learning Repository】Auto MPG Data Set
説明変数 | 内容(単位) |
---|---|
燃費 | 燃費(km/L) |
気筒数 | 気筒数(本) |
排気量 | 排気量(cc) |
馬力 | 馬力(hp) |
車体重量 | 車体重量(kg) |
加速性能 | 加速性能:時速97km(60mile)に到達する時間(秒) |
製造年 | 製造年(年) |
分類 | アメ車,日本車,欧州車の3区分 |
車名 | 車名(英語) |
d <- read.csv('https://stats.dip.jp/01_ds/data/car_mileage.csv')
rownames(d) <- paste0('No.', 1:nrow(d))
library(DT)
datatable(d)
車名を除くすべての説明変数を使って回帰分析する。 【注意】車名を入れると変数の数がデータサイズに近づき過学習する。
fit.full <- lm(燃費 ~ 気筒数 + 排気量 + 馬力 + 車体重量 + 加速性能 + 製造年 + 分類, data = d)
#summary(fit.full)
library(sjPlot)
tab_model(fit.full, show.stat = T, show.aic = T)
燃費 | ||||
---|---|---|---|---|
Predictors | Estimates | CI | Statistic | p |
(Intercept) | -635.52 | -721.28 – -549.77 | -14.57 | <0.001 |
気筒数 | -0.21 | -0.48 – 0.06 | -1.52 | 0.128 |
排気量 | 0.00 | 0.00 – 0.00 | 3.14 | 0.002 |
馬力 | -0.01 | -0.02 – 0.00 | -1.33 | 0.185 |
車体重量 | -0.01 | -0.01 – -0.01 | -10.24 | <0.001 |
加速性能 | 0.03 | -0.05 – 0.12 | 0.81 | 0.421 |
製造年 | 0.33 | 0.29 – 0.37 | 15.01 | <0.001 |
分類 [日本車] | 1.21 | 0.75 – 1.67 | 5.16 | <0.001 |
分類 [欧州車] | 1.12 | 0.64 – 1.59 | 4.64 | <0.001 |
Observations | 392 | |||
R2 / R2 adjusted | 0.824 / 0.821 | |||
AIC | 1390.309 |
有意でない偏回帰係数を持つ説明変数を除外
fit.manual <- lm(燃費 ~ 排気量 + 車体重量 + 製造年 + 分類, data = d)
#summary(fit.manual)
tab_model(fit.manual, show.stat = T, show.aic = T)
燃費 | ||||
---|---|---|---|---|
Predictors | Estimates | CI | Statistic | p |
(Intercept) | -653.14 | -737.14 – -569.15 | -15.29 | <0.001 |
排気量 | 0.00 | -0.00 – 0.00 | 1.87 | 0.063 |
車体重量 | -0.01 | -0.01 – -0.01 | -12.10 | <0.001 |
製造年 | 0.34 | 0.30 – 0.38 | 15.71 | <0.001 |
分類 [日本車] | 1.04 | 0.59 – 1.48 | 4.59 | <0.001 |
分類 [欧州車] | 1.01 | 0.54 – 1.48 | 4.25 | <0.001 |
Observations | 392 | |||
R2 / R2 adjusted | 0.821 / 0.818 | |||
AIC | 1392.150 |
変数間の相乗効果を表す交互作用項を追加(モデル式を2乗)する。 交互変数を追加すると組み合わせ数が多くなり,手動では変数選択が難しいため, ステップワイズ変数選択法を使用する。
【注意】ステップワイズ変数選択では有意でない偏回帰係数も選択される。 これはモデル選択の基準となるAICが予測誤差最小を評価する指標であり, 偏回帰係数の有意性の有無は考慮していないためである。
library(MASS)
fit.aic <- stepAIC(lm(燃費 ~ (気筒数 + 排気量 + 馬力 + 車体重量 + 加速性能 + 製造年 + 分類)^2, data = d), trace = 0)
#summary(fit.aic)
tab_model(fit.aic, show.stat = T, show.aic = T)
燃費 | ||||
---|---|---|---|---|
Predictors | Estimates | CI | Statistic | p |
(Intercept) | -24.78 | -777.54 – 727.99 | -0.06 | 0.948 |
気筒数 | -1.02 | -1.77 – -0.26 | -2.65 | 0.008 |
排気量 | -0.09 | -0.20 – 0.02 | -1.59 | 0.113 |
馬力 | 5.75 | 1.12 – 10.38 | 2.44 | 0.015 |
車体重量 | -0.01 | -0.01 – -0.01 | -8.58 | <0.001 |
加速性能 | -51.71 | -84.66 – -18.77 | -3.09 | 0.002 |
製造年 | 0.03 | -0.35 – 0.41 | 0.15 | 0.881 |
分類 [日本車] | -214.70 | -421.34 – -8.06 | -2.04 | 0.042 |
分類 [欧州車] | -232.77 | -448.44 – -17.09 | -2.12 | 0.034 |
気筒数 × 加速性能 | 0.07 | 0.02 – 0.11 | 2.89 | 0.004 |
排気量 × 車体重量 | 0.00 | 0.00 – 0.00 | 7.35 | <0.001 |
排気量 × 製造年 | 0.00 | -0.00 – 0.00 | 1.55 | 0.122 |
排気量 × 分類 [日本車] | 0.00 | 0.00 – 0.00 | 3.78 | <0.001 |
排気量 × 分類 [欧州車] | -0.00 | -0.00 – 0.00 | -0.90 | 0.369 |
馬力 × 製造年 | -0.00 | -0.01 – -0.00 | -2.45 | 0.015 |
車体重量 × 分類 [日本車] | -0.00 | -0.01 – -0.00 | -2.46 | 0.014 |
車体重量 × 分類 [欧州車] | 0.00 | -0.00 – 0.00 | 0.48 | 0.634 |
加速性能 × 製造年 | 0.03 | 0.01 – 0.04 | 3.06 | 0.002 |
加速性能 × 分類 [日本車] | 0.34 | 0.15 – 0.54 | 3.45 | 0.001 |
加速性能 × 分類 [欧州車] | 0.44 | 0.29 – 0.59 | 5.87 | <0.001 |
製造年 × 分類 [日本車] | 0.11 | 0.00 – 0.21 | 2.00 | 0.046 |
製造年 × 分類 [欧州車] | 0.11 | 0.01 – 0.22 | 2.06 | 0.040 |
Observations | 392 | |||
R2 / R2 adjusted | 0.894 / 0.888 | |||
AIC | 1217.342 |
tab_model(fit.full, fit.manual, fit.aic,
show.stat = T, show.aic = T,
dv.labels = c('車名除きフルモデル',
'手動選択モデル',
'ステップワイズ変数選択モデル'))
車名除きフルモデル | 手動選択モデル | ステップワイズ変数選択モデル | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Predictors | Estimates | CI | Statistic | p | Estimates | CI | Statistic | p | Estimates | CI | Statistic | p |
(Intercept) | -635.52 | -721.28 – -549.77 | -14.57 | <0.001 | -653.14 | -737.14 – -569.15 | -15.29 | <0.001 | -24.78 | -777.54 – 727.99 | -0.06 | 0.948 |
気筒数 | -0.21 | -0.48 – 0.06 | -1.52 | 0.128 | -1.02 | -1.77 – -0.26 | -2.65 | 0.008 | ||||
排気量 | 0.00 | 0.00 – 0.00 | 3.14 | 0.002 | 0.00 | -0.00 – 0.00 | 1.87 | 0.063 | -0.09 | -0.20 – 0.02 | -1.59 | 0.113 |
馬力 | -0.01 | -0.02 – 0.00 | -1.33 | 0.185 | 5.75 | 1.12 – 10.38 | 2.44 | 0.015 | ||||
車体重量 | -0.01 | -0.01 – -0.01 | -10.24 | <0.001 | -0.01 | -0.01 – -0.01 | -12.10 | <0.001 | -0.01 | -0.01 – -0.01 | -8.58 | <0.001 |
加速性能 | 0.03 | -0.05 – 0.12 | 0.81 | 0.421 | -51.71 | -84.66 – -18.77 | -3.09 | 0.002 | ||||
製造年 | 0.33 | 0.29 – 0.37 | 15.01 | <0.001 | 0.34 | 0.30 – 0.38 | 15.71 | <0.001 | 0.03 | -0.35 – 0.41 | 0.15 | 0.881 |
分類 [日本車] | 1.21 | 0.75 – 1.67 | 5.16 | <0.001 | 1.04 | 0.59 – 1.48 | 4.59 | <0.001 | -214.70 | -421.34 – -8.06 | -2.04 | 0.042 |
分類 [欧州車] | 1.12 | 0.64 – 1.59 | 4.64 | <0.001 | 1.01 | 0.54 – 1.48 | 4.25 | <0.001 | -232.77 | -448.44 – -17.09 | -2.12 | 0.034 |
気筒数 × 加速性能 | 0.07 | 0.02 – 0.11 | 2.89 | 0.004 | ||||||||
排気量 × 車体重量 | 0.00 | 0.00 – 0.00 | 7.35 | <0.001 | ||||||||
排気量 × 製造年 | 0.00 | -0.00 – 0.00 | 1.55 | 0.122 | ||||||||
排気量 × 分類 [日本車] | 0.00 | 0.00 – 0.00 | 3.78 | <0.001 | ||||||||
排気量 × 分類 [欧州車] | -0.00 | -0.00 – 0.00 | -0.90 | 0.369 | ||||||||
馬力 × 製造年 | -0.00 | -0.01 – -0.00 | -2.45 | 0.015 | ||||||||
車体重量 × 分類 [日本車] | -0.00 | -0.01 – -0.00 | -2.46 | 0.014 | ||||||||
車体重量 × 分類 [欧州車] | 0.00 | -0.00 – 0.00 | 0.48 | 0.634 | ||||||||
加速性能 × 製造年 | 0.03 | 0.01 – 0.04 | 3.06 | 0.002 | ||||||||
加速性能 × 分類 [日本車] | 0.34 | 0.15 – 0.54 | 3.45 | 0.001 | ||||||||
加速性能 × 分類 [欧州車] | 0.44 | 0.29 – 0.59 | 5.87 | <0.001 | ||||||||
製造年 × 分類 [日本車] | 0.11 | 0.00 – 0.21 | 2.00 | 0.046 | ||||||||
製造年 × 分類 [欧州車] | 0.11 | 0.01 – 0.22 | 2.06 | 0.040 | ||||||||
Observations | 392 | 392 | 392 | |||||||||
R2 / R2 adjusted | 0.824 / 0.821 | 0.821 / 0.818 | 0.894 / 0.888 | |||||||||
AIC | 1390.309 | 1392.150 | 1217.342 |
自由度調整済み決定係数(\(R^2\) adjusted)やAICを比べると, はステップワイズ変数選択モデル,次いで車名除きフルモデル, 最後に手動選択モデルの順に良いモデルとなった。
赤ワインの品質(quality)を予測する重回帰モデルとして,
フルモデル,手動選択モデル,ステップワイズ変数選択モデルを作成し性能を評価せよ。
ステップワイズ変数選択では,
化学物質の組み合わせの妙を表現するための交互作用項を導入せよ。
データの内容は次のURLを参照のこと。
赤ワインデータの解析
d <- read.csv('https://stats.dip.jp/01_ds/data/winequality-red.csv')
datatable(d)