重回帰分析について。
【目次】
単回帰分析については次の記事。
計算式等
重回帰分析は、多変量 { } の関係を直線で求める分析方法。
モデルは次のとおり。
■ 重回帰モデル
■ 重回帰式
は切片(intercept)、
は回帰係数(regression coefficient)であり、回帰係数は x が1増えた時に y がどのくらい増えるかを表す。
回帰係数の式は、「回帰係数」=「説明変数間の分散共分散行列の逆行列」×「説明変数と目的変数の共分散行列」。
なお、正規方程式から次のように回帰係数を求めることもできる。
※X:説明変数の行列、Y:目的変数の行列、β:回帰係数の行列、t:転置
また、説明変数で表現できないものを残差 と言い、この残差は互いに独立に正規分布
に従う。
重回帰分析は分散分析表で表現することができる。
この分散分析表は単回帰分析で示したものと同じ。
■ 分散分析表
変動因 | 平方和 | 自由度 | 平均平方 | F比 |
---|---|---|---|---|
回帰R | ||||
残差e | ||||
全体T |
k=説明変数の数
なお、平方和と自由度は の関係が成り立つ。
モデルの評価指標としては次のようなものがある(一例)。
寄与率もしくは決定係数(R-square)
0~1の値を取り、1に近いほど良い。
自由度調整済寄与率もしくは自由度調整済決定係数(adjusted R-square)
0~1の値を取り、1に近いほど良い。
RMSE(Root Mean Square Error, 二乗平均平方根誤差)
相対的な指標であり、値が小さいほど良い。予測値と実測値の誤差に関する指標。
AIC(Akaike's Information Criterion, 赤池情報量規準)
※ MLL : 最大対数尤度(Maximum Log Likelihood), k : 説明変数の数
相対的な指標であり、値が小さいほど良い。2×(k) が説明変数の数に対する罰則項である。
VIF(Variance Inflation Factor, 分散拡大係数)
※ r : 相関係数
多重共線性の評価に用いる。目安として10以上で多重共線性があると考える。
ノート
今回も架空データで簡単に計算方法を見てみる。
x1 = {1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3}
x2 = {2, 1, 1, 2, 1, 3, 4, 2, 4, 3, 3, 6, 6, 4, 5}
x3 = {5, 6, 5, 2, 3, 5, 7, 5, 4, 6, 5, 9, 6, 5, 5}
x4 = {2, 1.5, 2, 2, 1.5, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4}
y = {1.1, 2.4, 3.3, 2.5, 1.3, 3.1, 2.7, 4.9, 2.4, 3.5, 5.8, 4.4, 3.1, 4.9, 5.3}
Excelでの計算:
モデルの作成
分散共分散行列と逆行列は次のとおり。
よって、今回の重回帰式は次のとおり。
モデルの評価
今回の結果についてVIFを調べてみると x1=38.2, x2=4.3, x3=1.5, x4=40.2 であり、x1 と x4 に多重共線性が疑われる(VIF≧10を目安)。x1 と x4 は相関係数=0.987 であり、かなり強い相関関係がある様子。
したがって、x1 と x4 の一方を外したモデルを作って再評価してみる。また、x3 が非有意(p>0.05)だったため、x3 を外したモデルも作ってみる。
(※この記事では変数選択の手法には触れない。)
<評価モデル>
res1 : y = x1 + x2 + x3 + x4
res2 : y = x1 + x2 + x3
res3 : y = x2 + x3 + x4
res4 : y = x1 + x2
res5 : y = x2 + x4
実行結果は次のとおり。
res1 | res2 | res3 | res4 | res5 | |
VIF≧10 | あり | なし | なし | なし | なし |
R2 | 0.853 | 0.812 | 0.849 | 0.808 | 0.839 |
adj R2 | 0.794 | 0.761 | 0.808 | 0.776 | 0.812 |
RMSE | 0.643 | 0.692 | 0.620 | 0.670 | 0.613 |
AIC | 35.256 | 36.873 | 33.573 | 35.192 | 32.558 |
x1 と x4 の一方を外すことで VIF≧10 の変数は無くなり、多重共線性の問題が解消されたと考えられる。
また、自由度調整済寄与率 の最大値、RMSEとAICの最小値は何れも res5 であり、今回は res5: y=x2 + x4 が最良モデルと考えられる。
なお、res5のモデルは統計的に有意であり(p<0.001)、各回帰係数も有意(x2: p<0.05, x4: p<0.001)。
※今回のモデル比較では、説明変数の数が異なるため、寄与率は は使わず、自由度調整済寄与率
を評価指標としている。
Rでの実行
> ads <- data.frame(x1 = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3) + ,x2 = c(2, 1, 1, 2, 1, 3, 4, 2, 4, 3, 3, 6, 6, 4, 5) + ,x3 = c(5, 6, 5, 2, 3, 5, 7, 5, 4, 6, 5, 9, 6, 5, 5) + ,x4 = c(2, 1.5, 2, 2, 1.5, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4) + ,y = c(1.1, 2.4, 3.3, 2.5, 1.3, 3.1, 2.7, 4.9, 2.4, 3.5, 5.8, 4.4, 3.1, 4.9, 5.3)) > res1 <- lm(y ~ x1 + x2 + x3 + x4, data=ads) > summary(res1) Call: lm(formula = y ~ x1 + x2 + x3 + x4, data = ads) Residuals: Min 1Q Median 3Q Max -0.8829 -0.3648 -0.2275 0.4359 0.9455 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -1.16286 1.11986 -1.038 0.32354 x1 0.58168 1.25690 0.463 0.65342 x2 -0.87065 0.21243 -4.099 0.00215 ** x3 0.09705 0.12824 0.757 0.46665 x4 1.91008 1.15667 1.651 0.12968 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 0.6434 on 10 degrees of freedom Multiple R-squared: 0.8525, Adjusted R-squared: 0.7935 F-statistic: 14.45 on 4 and 10 DF, p-value: 0.0003674 > AIC(res1) [1] 35.25556 > vif(res1) x1 x2 x3 x4 38.165148 4.331555 1.446171 40.185695 #他のモデル # res2 <- lm(y ~ x1 + x2 + x3, data=ads) # res3 <- lm(y ~ x2 + x3 + x4, data=ads) # res4 <- lm(y ~ x1 + x2, data=ads) # res5 <- lm(y ~ x2 + x4, data=ads)
SASでの実行
data ads;
input x1 x2 x3 x4 y @@;
cards;
1 2 5 2 1.1 1 1 6 1.5 2.4 1 1 5 2 3.3 1 2 2 2 2.5 1 1 3 1.5 1.3
2 3 5 3 3.1 2 4 7 3 2.7 2 2 5 3 4.9 2 4 4 3 2.4 2 3 6 3 3.5
3 3 5 4 5.8 3 6 9 4 4.4 3 6 6 4 3.1 3 4 5 4 4.9 3 5 5 4 5.3
;run;
proc reg data=ads;
model y = x1 x2 x3 x4 / SELECTION=ADJR RSQUARE AIC RMSE VIF;
run;
プログラムコード
■ Rのコード
library(car)
res <- lm(y ~ x1 + x2, data=InputDS)
summary(res)
vif(res) #-- VIFを算出
AIC(res) #-- AICを算出
■ SASのコード
ods listing close;
ods output SubsetSelSummary=OutputSummary; /* 全変数パターンの評価指標値を取得 */
proc reg data=[InputDS];
model y = x1 x2 / selection=ADJR RSQUARE AIC RMSE VIF; /* VIFはmodelの式のみ */
output out=[OutputDS] p=pred r=residuals; /* modelに書いた式での予測値・残差取得 */
run;quit;
ods listing;
■ Pythonのコード
整備中
偏回帰係数の詳細
の求め方についてもう少し突っ込んでみる。
精度の良いモデルとは、残差 が小さいモデルであるため、残差平方和が最小の時の
を用いれば良いと考えられる(最小二乗法)。
したがって、 について偏微分した式を連立方程式にして最良値を求める。
元:
※合成関数の微分により、[n]×[関数^(n-1)]×[関数の中身の偏微分]。傾き最小を求めるので右辺は0。
ここから -2 を除去して変形すると次のようになり、
①を用いて、 を次の関係式で表すことができる。
この⑤を②に代入して、次の関係式を求める。
③④も同じ処理で次の関係式を求める。
これら⑥⑦⑧を行列表現すると次のようになり、
さらに変形して、各回帰係数の導出式を得る。
つまり、「回帰係数」=「説明変数間の分散共分散行列の逆行列」×「説明変数と目的変数の共分散行列」。
よって、⑤⑨から は次となる。
なお、分散共分散行列を相関行列にすると標準偏回帰係数が得られる。
・・・その他、
①②③④を行列表現すると次のようになり、この方程式からも回帰係数を導出できる(この方程式を「正規方程式」と言う)。
<再掲>
<正規方程式・回帰係数の解>
※X:説明変数の行列、Y:目的変数の行列、β:回帰係数の行列、t:転置
Excelで計算する際は、①の切片項=1(下図のA列)を与えて、公式通り計算。
この方法だと、分析共分散行列を作らず、説明変数と目的変数を直接使って回帰係数を導出できる。