(JAPLA 2005/09/24)
重回帰分析におけるAICを用いた変数選択
帝京平成大学 鈴木義一郎
まず、回帰分析に必要な「関数群」を次のように用意しておく。
stat_reg=:3 :0
regb=:[%.1:,.] NB.regression
coefficient
regp=:(1:,.])+/ .*regb NB.predicted
value
regq=:[:+/[:*:[-regp NB.sum of
residuale
regcd=:100"_*1:-regq%[:+/[:*:(]-+/%#)@[
NB.coefficient of determination(%)
mat=:[:%.(|:+/ .*])@(1:,.])
NB.inverse of data matrix
resvar=:regq%[:-/[:$1:,.] NB.residual
varience
regt=:regb%[:%:resvar*[:(<1
0)&|:mat@] NB.t-value of regression coefficients
mll=:>:@^.@((o.2)"_*regq%#@[)*#@[%_2:
NB.MLL(Maximum Log Likelyhood
regaic=:+:@(1:+#@(1:,:]))-2:*mll
'program set of regression model'
)
stat_reg ‘’
program set of regression model
これで、関数群が導入された。
そこで、竹内氏のJAPLA 2005夏合宿のTest
Data を定義する。
Y=:23.6 26.5 24 19 21.7 22.9 26 28.2
25.5 23 21.6 21 26.2 27 24
X1=:20.6 22.8 18.3 16.5 17 22.1 18.9
19.3 19.3 15.4 18.8 18.3 18.1 23.9 22.4
X2=:11.5 15.8 13 15.9 11.1 16.1 15
11.8 15.2 15.6 17.2 14.5 16.1 16.6 13
X3=:2.9 6.2 3.7 5.6 2.1 5 6 2.1 7 4.1
6.8 4.4 4.6 6 6
X4=:7 8.7 6.1 9.7 7 7 7.3 6.1 5.2 5.2
8.7 4.2 7.9 7.9 7.3
X5=:1.7 4.3 3.4 5.1 1.7 3.5 3.5 1.7
3.5 3.6 2.6 3.3 2.6 4.4 3.5
X6=:8.73 8.6 7.62 8.68 7.83 9.65 7.27
6.84 7.57 6.7 8.7 8.71 6.91 8.85 9.33 % 10
X7=:2.97 3.28 2.54 5.11 3.23 3.06
2.81 2.16 2.04 2.26 4.03 2 3.02 2.93 3.04 % 10
X8=:0.83 1.89 1.86 3.09 1 1.58 1.85
0.88 1.81 2.34 1.38 1.8 1.44 1.84 1.56 % 10
X9=:5.86 6.94 9.19 9.11 8.1 7 5.83 8.1
5 8.78 3.82 7.5 5.65 7.33 5.83 % 10
X10=:6.09 5.51 4.69 6.1 6.31 4.35
4.87 5.17 3.42 3.33 5.06 2.9 4.91 4.76 5.62 % 10
X=:|:X1,X2,X3,X4,X5,X6,X7,X8,X9,:X10
X,.Y
20.6 11.5 2.9 7 1.7 0.873 0.297 0.083 0.586
0.609 23.6
22.8 15.8 6.2 8.7 4.3 0.86 0.328 0.189 0.694 0.551 26.5
18.3 13 3.7 6.1 3.4 0.762 0.254 0.186 0.919 0.469 24
16.5 15.9 5.6 9.7 5.1 0.868 0.511
0.309 0.911 0.61 19
17 11.1 2.1
7 1.7 0.783 0.323
0.1 0.81 0.631 21.7
22.1 16.1 5 7
3.5 0.965 0.306 0.158 0.7
0.435 22.9
18.9 15
6 7.3 3.5 0.727 0.281 0.185 0.583 0.487 26
19.3 11.8 2.1 6.1 1.7 0.684 0.216
0.088 0.81 0.517 28.2
19.3 15.2 7 5.2 3.5 0.757 0.204 0.181 0.5 0.342 25.5
15.4 15.6 4.1 5.2 3.6 0.67 0.226 0.234 0.878 0.333 23
18.8 17.2 6.8 8.7 2.6 0.87 0.403 0.138 0.382 0.506 21.6
18.3 14.5 4.4 4.2 3.3 0.871 0.2 0.18 0.75 0.29 21
18.1 16.1 4.6 7.9 2.6 0.691 0.302
0.144 0.565 0.491 26.2
23.9 16.6 6 7.9 4.4 0.885 0.293 0.184 0.733 0.476 27
22.4 13
6 7.3 3.5 0.933 0.304 0.156 0.583 0.562 24
>:/: Y regaic"1 |:X
7 1 6 8 9 5 4 10 2 3
この結果は、単回帰の場合の情報量規準(AIC)の小さい順の変数Xの番号を示している。
次に、目的変数(Y)を左引数に、説明変数(X)と用いる変数の個数(k)を「k;X」の形で右引数に入力して、採用した変数と情報量規準(AIC)をボックスの形で出力する両側関数を次のように定義する:
compare=:4 :0
s=.((>{.y.)=+/"1
t)#t=.#:i.2^#y=.>{:y.
r=.,:(k{s);x.regaic|:(k=.0){u=.s#y
while. k<<:#s
do. r=.r,(k{s);x.regaic|:(k=.k+1){u
end.
)
まず、全部の変数を用いた場合の情報量規準
Y regaic X
_18.2885
のように算出される。
そこで、説明変数の個数を9個、8個と順次減少せしめた時の「AIC」を最小にする変数の組合せとAICの値を示してみると、以下のようになる。
((=<./)>{:"1 t)#t=:Y compare 9;|:X
1 1 1 1 1 1 1 0 1 1 |
_17.4898 |
((=<./)>{:"1 t)#t=:Y compare 8;|:X
1 1 1 1 0 1 1 0 1 1 |
_17.1509 |
((=<./)>{:"1 t)#t=:Y compare 7;|:X
1 1 0 1 1 1 1 0 0 1 |
_12.9917 |
((=<./)>{:"1 t)#t=:Y compare 6;|:X
1 1 0 0 1 1 1 0 0 1 |
_9.22404 |
((=<./)>{:"1 t)#t=:Y compare 5;|:X
1 1 0 1 0 1 0 0 0 1 |
_0.890523 |
((=<./)>{:"1 t)#t=:Y compare 4;|:X
1 0 0 0 1 1 0 1 0 0 |
1.07253 |
((=<./)>{:"1 t)#t=:Y compare 3;|:X
1 0 0 0 1 1 0 0 0 0 |
2.20332 |
((=<./)>{:"1 t)#t=:Y compare 2;|:X
1 0 0 0 0 1 0 0 0 0 |
3.09146 |
((=<./)>{:"1 t)#t=:Y compare 1;|:X
0 0 0 0 0 0 1 0 0 0 |
71.1598 |
7個の変数までの「決定係数」を算出してみると
Y regcd X
99.8097
Y regcd |:X1,X2,X3,X4,X5,X6,X7,X9,:X10
99.7993
Y regcd |:X1,X2,X3,X4,X6,X7,X9,:X10
99.7947
Y regcd |:X1,X2,X4,X5,X6,X7,:X10
99.7291
といった結果になるから、当てはまりはかなり良好である。
最後に、4つのモデルの「t−値」をチェックしてみると
Y regt X
5.7979 8.53216 _2.64812 _1.21633
1.01017 0.531599 _8.73857 1.61007 _0.467718 _1.19988 _2.85622
Y regt |:X1,X2,X3,X4,X5,X6,X7,X9,:X10
8.78653 10.2421 _2.83758 _1.32083
1.31097 0.338029 _11.1566 1.82217 _1.27949 _3.06918
Y regt |:X1,X2,X3,X4,X6,X7,X9,:X10
10.0292 11.0977 _3.05993 _2.85687
1.4502 _12.194 1.94324 _3.26486 _3.31798
Y regt |:X1,X2,X4,X5,X6,X7,:X10
9.49097 10.4314 _2.75603 1.41377
_2.92771 _11.4584 1.54838 _2.95442
といった結果になる。
ところで、全部の変数を使ったモデルと9個の変数を使ったモデルにはt−値の絶対値の小さな箇所が幾つか散見される。これに対して「X1,X2,X3,X4,X6,X7,X9,:X10」という8個の変数を使ったモデルでは、X4のt−値が「1.4502」、X7のt−値が「1.94324」で、他の変数のt−値の絶対値はかなり大きいことから、このモデルを採択すべきであるという結論が得られる。
Y1=:4 6 5 5 5 6 6 6 6 3 4 6 5 4 5 5 6 6 6 4 6 5 6 4 6
5 5 6 4 6 5 1 6 6 5 6 5 4 3 5 5 5 6 6 6 1 6 6 2 5 3 1 5 5 5 1 2 5 4 5 5 5 6 3 2
4 6 5 6 6 4 6 6 5 6 6 5 5 6 5 5 2 6 4 3 3 1
Y2=:4 5 5 6 5 6 5 6 6 4 3 6 4 5 5 5 6 6 5 2 6 5 6 4 6
5 5 6 4 6 4 1 6 6 5 5 5 4 3 5 6 5 6 6 6 1 6 6 1 5 2 1 5 5 4 1 2 5 4 6 6 5 6 1 2
5 6 5 6 6 5 6 6 5 6 6 5 5 6 6 5 1 6 4 2 2 2
Y3=:4 5 5 6 5 6 6 6 6 3 4 6 5 5 5 5 6 6 5 2 6 5 6 3 6
5 5 6 4 6 4 1 6 6 6 5 5 4 3 5 6 5 6 6 6 1 6 5 2 5 2 1 5 5 3 1 2 5 4 6 6 6 6 1 2
4 6 5 6 6 5 6 6 4 6 5 5 5 6 6 5 2 6 3 2 3 1
A=:5 5 5 5 4 5 5 4 3 2 4 5 3 3 3 5 5 5 5 5 5 5 3 3 5 3
5 5 5 5 5 2 5 5 4 5 5 1 3 5 5 5 5 5 5 1 5 5 2 5 5 1 2 5 3 2 3 3 1 5 5 3 5 2 2 2
4 5 5 5 3 5 3 4 5 5 2 5 5 5 5 2 5 5 2 1 2
B=:5 5 5 4 4 5 5 4 3 2 2 5 3 3 2 5 5 5 5 5 5 5 3 3 5 3
5 5 5 5 5 2 5 5 4 5 5 1 2 5 4 5 5 5 5 1 5 5 2 5 5 1 2 5 2 2 4 2 1 5 5 3 5 2 1 2
4 5 5 5 2 5 3 4 5 5 2 5 5 5 5 2 5 5 2 1 1
C=:4 3 5 4 5 5 5 3 3 1 1 5 1 2 1 3 5 5 5 5 5 4 3 3 5 2
4 4 3 5 5 2 4 5 3 3 5 1 1 5 4 3 5 5 5 1 5 4 1 5 3 1 1 3 1 2 2 1 1 5 5 2 4 2 1 1
4 5 5 5 1 5 3 4 5 5 1 4 4 5 3 1 5 3 1 1 1
D=:5 5 5 5 5 5 5 5 3 2 3 5 5 3 3 5 5 5 5 5 5 5 4 3 5 3
5 5 5 5 5 2 5 5 5 5 5 2 2 5 5 5 5 5 5 1 5 5 2 5 4 1 3 5 2 2 4 3 1 5 5 3 5 2 2 2
4 5 5 5 2 5 5 4 5 5 3 5 5 5 5 1 5 5 2 2 2
E=:5 5 5 4 5 5 5 5 3 2 3 5 3 3 2 5 5 5 5 5 5 5 4 3 5 3
3 5 5 5 5 2 5 5 3 5 5 2 2 5 3 5 5 5 5 2 5 5 2 5 4 2 2 5 2 2 2 2 2 5 5 3 3 2 2 2
4 5 5 5 2 5 3 5 5 5 2 3 5 5 5 2 5 5 2 2 2
F=:5 5 5 5 5 5 5 4 4 3 5 5 5 4 5 5 5 5 5 5 5 5 5 3 5 5
5 5 5 5 5 3 5 5 5 5 1 3 3 5 5 5 5 5 5 1 5 5 3 5 5 1 3 5 3 2 4 3 1 5 5 5 5 2 2 3
5 5 5 5 3 5 5 5 5 5 4 5 5 5 5 1 5 5 3 2 2
G=:5 5 4 4 3 5 5 3 3 1 1 5 3 2 3 3 5 5 5 5 5 4 3 2 5 1
5 4 3 5 5 2 4 4 3 4 5 1 1 5 5 4 5 5 5 1 5 4 1 3 1 1 2 4 1 2 1 1 1 5 5 3 3 1 1 1
4 5 5 5 1 5 3 3 5 5 1 3 3 5 3 1 5 4 1 1 1
H=:5 5 5 5 5 5 5 5 3 3 5 5 3 3 5 5 5 5 5 3 5 5 5 3 5 5
5 5 5 5 5 3 5 5 5 5 5 2 2 5 5 5 5 5 5 1 5 5 4 5 5 1 3 5 1 2 4 2 2 5 5 5 5 1 2 3
4 5 5 5 3 5 3 5 5 5 3 5 5 5 5 1 5 5 3 1 3
I=:5 5 5 5 5 5 5 5 3 3 5 5 5 3 3 5 5 5 5 5 5 5 3 5 5 5
5 5 5 5 5 2 5 5 5 5 5 2 2 5 5 5 5 5 5 1 5 5 2 5 4 1 3 5 2 2 4 3 2 5 5 4 5 3 2 2
4 5 5 5 2 5 5 5 5 5 3 5 5 5 5 1 5 5 3 2 2
J=:5 5 5 5 5 5 5 5 3 2 3 5 3 3 2 5 5 5 5 5 5 5 5 3 5 3
5 4 5 5 5 4 5 5 5 5 5 1 2 5 5 5 5 5 5 1 5 5 2 5 5 1 3 5 2 2 3 3 2 5 5 3 5 2 2 2
3 5 5 5 2 5 3 5 5 5 3 5 5 5 5 2 5 5 2 2 2
K=:3 5 5 4 3 5 5 4 3 2 2 5 3 2 2 5 5 5 5 3 5 5 3 3 5 3
4 5 5 5 5 2 4 5 3 5 5 2 2 5 3 3 5 5 5 1 5 5 2 5 3 1 2 4 2 2 2 2 1 5 5 3 3 2 2 2
3 5 5 5 2 5 3 3 5 5 2 3 3 5 3 1 5 4 2 2 2
L=:5 5 5 5 5 5 5 5 3 2 2 5 3 3 2 5 5 5 5 5 5 5 4 2 5 2
2 5 5 5 5 2 5 5 4 5 5 2 2 5 4 5 5 5 5 2 5 5 2 5 5 2 2 5 2 2 2 2 2 5 5 3 4 2 2 2
4 5 5 5 2 5 3 4 5 5 3 5 5 5 5 2 5 5 2 2 2
M=:5 5 5 4 3 5 5 4 3 1 3 5 3 2 3 4 5 5 5 5 5 5 3 3 5 3
4 5 3 5 5 1 5 5 4 5 5 1 1 5 4 4 5 5 5 1 5 4 1 4 3 1 1 5 2 1 2 1 1 5 5 4 5 1 1 1
4 5 5 5 3 5 3 4 5 5 3 5 5 5 4 1 5 5 1 1 1
$ R=:A,B,C,D,E,F,G,H,I,J,K,L,:M
13 87
>:/: Y1 regaic"1 R
13 4 9 6 11 7 1 2 5 10 12 8 3
>:/: Y2 regaic"1 R
13 4 6 8 9 11 7 1 10 3 2 12 5
>:/: Y3 regaic"1 R
13 4 6 8 9 7 11 1 10 12 2 3 5
>:/: Y
regaic"1 R
13 4 6 9 7 11 8 1 10 2 12 3 5
$X=:M,D,F,I,G,:H
6 87
compare=:4 :0
s=.((>{.y.)=+/"1
t)#t=.#:i.2^#y=.>{:y.
r=.,:(k{s);x.regaic|:(k=.0){u=.s#y
while. k<<:#s
do. r=.r,(k{s);x.regaic|:(k=.k+1){u
end.
)
Y compare 1;M,D,:F
0 0 1 |
449.194 |
0 1 0 |
443.763 |
1 0 0 |
439.743 |
Y compare 2;M,D,:F
0 1 1 |
437.466 |
1 0 1 |
430.914 |
1 1 0 |
435.859 |
Y compare 3;M,D,:F
1 1 1 |
430.545 |
Y compare 1;X
0 0 0 0 0 1 |
456.151 |
0 0 0 0 1 0 |
456.074 |
0 0 0 1 0 0 |
451.814 |
0 0 1 0 0 0 |
449.194 |
0 1 0 0 0 0 |
443.763 |
1 0 0 0 0 0 |
439.743 |
Y compare 2;X
0 0 0 0 1 1 |
442.669 |
0 0 0 1 0 1 |
447.024 |
0 0 0 1 1 0 |
442.582 |
0 0 1 0 0 1 |
444.481 |
0 0 1 0 1 0 |
434.071 |
0 0 1 1 0 0 |
442.071 |
0 1 0 0 0 1 |
441.005 |
0 1 0 0 1 0 |
441.07 |
0 1 0 1 0 0 |
443.457 |
0 1 1 0 0 0 |
437.466 |
1 0 0 0 0 1 |
437.176 |
1 0 0 0 1 0 |
439.422 |
1 0 0 1 0 0 |
437.688 |
1 0 1 0 0 0 |
430.914 |
1 1 0 0 0 0 |
435.859 |
Y compare 3;X
0 0 0 1 1 1 |
439.717 |
0 0 1 0 1 1 |
433.492 |
0 0 1 1 0 1 |
441.115 |
0 0 1 1 1 0 |
433.324 |
0 1 0 0 1 1 |
438.349 |
0 1 0 1 0 1 |
441.004 |
0 1 0 1 1 0 |
440.423 |
0 1 1 0 0 1 |
437.032 |
0 1 1 0 1 0 |
433.002 |
0 1 1 1 0 0 |
437.464 |
1 0 0 0 1 1 |
436.698 |
1 0 0 1 0 1 |
436.554 |
1 0 0 1 1 0 |
437.29 |
1 0 1 0 0 1 |
430.912 |
1 0 1 0 1 0 |
430.096 |
1 0 1 1 0 0 |
430.913 |
1 1 0 0 0 1 |
435.046 |
1 1 0 0 1 0 |
435.843 |
1 1 0 1 0 0 |
435.858 |
1 1 1 0 0 0 |
430.545 |
Y compare 4;X
0 0 1 1 1 1 |
433.108 |
0 1 0 1 1 1 |
438.259 |
0 1 1 0 1 1 |
432.782 |
0 1 1 1 0 1 |
436.987 |
0 1 1 1 1 0 |
432.968 |
1 0 0 1 1 1 |
436.064 |
1 0 1 0 1 1 |
430.093 |
1 0 1 1 0 1 |
430.911 |
1 0 1 1 1 0 |
430.096 |
1 1 0 0 1 1 |
434.957 |
1 1 0 1 0 1 |
434.996 |
1 1 0 1 1 0 |
435.837 |
1 1 1 0 0 1 |
430.539 |
1 1 1 0 1 0 |
429.984 |
1 1 1 1 0 0 |
430.282 |
Y compare 5;X
0 1 1 1 1 1 |
432.777 |
1 0 1 1 1 1 |
430.091 |
1 1 0 1 1 1 |
434.935 |
1 1 1 0 1 1 |
429.984 |
1 1 1 1 0 1 |
430.281 |
1 1 1 1 1 0 |
429.874 |
Y compare 6;X
1 1 1 1 1 1 |
429.872 |
Y regcd |:X
61.7886
Y1 regcd |:X
65.3528
Y2 regcd |:X
56.8329
Y3 regcd |:X
57.7126
Y1 regaic |:X
222.431
Y2 regaic |:X
258.784
Y1 regt |:X
3.76077 2.21832 0.201419 2.65222
0.476612 0.432455 _1.39699
Y regt |:X
2.97485 1.64825 0.449666 2.18957
_0.321256 0.614117 0.0487277
Y regt |:M,D,I,:G
4.19895 2.10677 1.17501 0.0726581
0.139235
Y regt |:M,D,:G
4.61451 2.26709 1.8671 0.123791
Y regcd |:M,D,:G
59.074
Y regcd M,.D
59.0664
Y regt M,.D
4.68096 2.82659 1.95832
Y regcd M,.F
61.3282
Y regt M,.F
3.3709 4.43191 2.99535
Y1 compare 2;M,D,:F
0 1 1 |
233.315 |
1 0 1 |
225.134 |
1 1 0 |
230.342 |
Y1 regcd M,.F
64.2594
Y1 regt M,.F
4.12399 4.85388 3.04765
Y1 regcd |:M,D,:F
64.4023
Y1 regt |:M,D,:F
3.82062 2.92391 0.577103 2.33965