No.22108 単変量を積み重ねても多変量にならない件  【青木繁伸】 2016/08/18(Thu) 18:53

以下で用いるデータセット zip 形式で圧縮,エンコーディングは utf-8

22108.zip


No.22109 Re: 単変量を積み重ねても多変量にならない件  【青木繁伸】 2016/08/18(Thu) 19:12

上のデータを使って分析した結果を吟味してみよう。
> d = read.table("glm.dat", header=TRUE, fileEncoding="euc-jp")
相関係数を見ると,y と x1, X2, x4 はかなりの相関があるが,x3 とはほとんど無相関(それぞれ散布図を描いてみるとよい)。
> cor(d)
x1 x2 x3 x4 y
x1 1.00000000 0.6130828 -0.08943241 0.4913103 0.5505327
x2 0.61308282 1.0000000 0.30814005 0.8306170 0.6977745
x3 -0.08943241 0.3081401 1.00000000 0.2534457 -0.0259393
x4 0.49131031 0.8306170 0.25344571 1.0000000 0.6663762
y 0.55053270 0.6977745 -0.02593930 0.6663762 1.0000000
x1 〜 x4 を用いて単変量ロジスティック回帰を行う(出力の一部を省略)
x1, x2, x4 が有意
> summary(glm(y ~ x1, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -11.33739 2.34670 -4.831 1.36e-06
x1 0.19621 0.04275 4.590 4.43e-06
Residual deviance: 80.772 on 98 degrees of freedom
> summary(glm(y ~ x2, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -19.6555 4.0133 -4.898 9.70e-07
x2 0.3542 0.0746 4.748 2.06e-06
Residual deviance: 51.258 on 98 degrees of freedom
> summary(glm(y ~ x3, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.65418 1.13867 -0.575 0.566
x3 -0.00582 0.02245 -0.259 0.795 有意ではない
Residual deviance: 118.52 on 98 degrees of freedom
> summary(glm(y ~ x4, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -14.13175 2.85497 -4.950 7.43e-07
x4 0.25013 0.05271 4.745 2.09e-06
Residual deviance: 65.143 on 98 degrees of freedom
x1,x2,x4 を使って分析すると
> summary(glm(y ~ x1+x2+x4, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -36.07419 9.16181 -3.937 8.24e-05
x1 0.22755 0.08223 2.767 0.00566
x2 0.27575 0.09711 2.839 0.00452
x4 0.15913 0.07817 2.036 0.04178
Residual deviance: 35.413 on 96 degrees of freedom AIC: 43.413
そらみろ,ちゃんと全部有意になったじゃないかと,思いきや
総当たり法でやってみて,AIC が小さい順に挙げると,x1, x2, x4 を含むモデルは 5 番目。
上位 4 モデルは「すべて x3 が入っている!!」
x3 って,y と相関なかったよね?
> print(all.logistic(d), sort.by="AIC")

deviance AIC Formula
26.56728 36.56728 y ~ x1 + x2 + x3 + x4
29.30262 37.30262 y ~ x1 + x2 + x3
33.52754 41.52754 y ~ x2 + x3 + x4
35.80734 41.80734 y ~ x2 + x3
35.41286 43.41286 y ~ x1 + x2 + x4
40.34653 46.34653 y ~ x1 + x2
43.94204 51.94204 y ~ x1 + x3 + x4
45.99639 51.99639 y ~ x1 + x4
48.08899 54.08899 y ~ x2 + x4
51.25798 55.25798 y ~ x2
58.07721 64.07721 y ~ x3 + x4
65.14314 69.14314 y ~ x4
80.77157 84.77157 y ~ x1
80.65916 86.65916 y ~ x1 + x3
118.52330 122.52330 y ~ x3
全部使うモデルはいくらなんでも
それに x4 は有意じゃないよ
> summary(glm(y ~ x1+x2+x3+x4, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -36.24623 10.78017 -3.362 0.000773
x1 0.22241 0.10053 2.212 0.026950
x2 0.49536 0.17206 2.879 0.003989
x3 -0.21480 0.09236 -2.326 0.020037
x4 0.14700 0.09586 1.533 0.125160
Residual deviance: 26.567 on 95 degrees of freedom AIC: 36.567
じゃあ,x4 なんか除いてしまえ。
いいんじゃないですか。
> summary(glm(y ~ x1+x2+x3, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -31.04391 9.05752 -3.427 0.000609
x1 0.20348 0.09389 2.167 0.030219
x2 0.56413 0.15877 3.553 0.000381
x3 -0.21993 0.08598 -2.558 0.010529
Residual deviance: 29.303 on 96 degrees of freedom AIC: 37.303
その他のモデルもやってみよう。
> summary(glm(y ~ x2+x3+x4, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -22.31070 5.92023 -3.769 0.000164
x2 0.49410 0.14808 3.337 0.000848
x3 -0.21307 0.07859 -2.711 0.006705
x4 0.11349 0.07827 1.450 0.147039
Residual deviance: 33.528 on 96 degrees of freedom AIC: 41.528
> summary(glm(y ~ x2+x3, data=d, family=binomial))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -19.33143 4.71465 -4.100 4.13e-05
x2 0.54806 0.13307 4.119 3.81e-05
x3 -0.21356 0.07522 -2.839 0.00452
Residual deviance: 35.807 on 97 degrees of freedom AIC: 41.807
じつは,このデータセット,他に x5 というのがあるのだけどこれが強力で,x5 一つだけで十分予測ができてしまうというシロモノ。分析に使った(使えた)変数だけを弄っているだけでは,そんな強力な変数があるなんて,お釈迦様でも気がつかないわけです。

No.22110 Re: 単変量を積み重ねても多変量にならない件  【青木繁伸】 2016/08/18(Thu) 19:21

2群の判別分析の場合に,2群で平均値の全く同じ変数を使うと判別率が上がるというのがわかりやすく図示している
http://aoki2.si.gunma-u.ac.jp/lecture/Discriminant/ans2.html
分析例
http://aoki2.si.gunma-u.ac.jp/BlackBox/how2use/dataset2.html

つまり,2群の平均値の差が有意な変数を使って判別分析をするのは NG ということ

重回帰分析の場合も同様

No.22115 Re: 単変量を積み重ねても多変量にならない件  【さくらとお城】 2016/08/19(Fri) 16:07

青木先生,いつもありがとうございます。大変わかりやすい例示で,よくわかりました。

● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る