No.16050 多変量解析における変数選択について  【深江】 2011/12/22(Thu) 17:05

いつもお世話になってます。

多変量解析を行う際,ある目的変数を説明する変数を考える時,説明変数同士の相関があるかどうかの検討を行って,相関しないもの同士を一緒に説明変数として用いると思いますが,

互いに相関がある説明変数同士を一緒に説明変数として用いていい場合というのは存在しないのでしょうか?

説明変数の候補がいくつか存在しているのですが,その候補が多数あり,相関しているものが多いため,どのように扱ったらいいのかわからないため困っています。

変数選択法は,AICを用いて行うつもりです。

ご教授よろしくお願いします。

No.16051 Re: 多変量解析における変数選択について  【青木繁伸】 2011/12/22(Thu) 17:46

> 相関しないもの同士を一緒に説明変数として用いると思いますが

現実的に,相関が0の説明変数なんかないのです。

> 互いに相関がある説明変数同士を一緒に説明変数として用いていい場合というのは存在しないのでしょうか

そちらの方が普通です。

> 相関しているものが多いため,どのように扱ったらいいのかわからないため困っています

多重共線性のあるモデルができるのを避けるには,変数増減法などがよいでしょう。AICによる変数選択は,単に AIC の大小によってのみモデルを選択するので,多重共線性があろうとなかろうと無頓着にモデルを選択してしまうと思います。

No.16054 Re: 多変量解析における変数選択について  【深江】 2011/12/23(Fri) 00:06

ご回答ありがとうございます。

説明不足でしたが有意に相関がある変数を一緒に説明変数として用いてもよいのかがよくわからないです。

AICより変数増減法の方がいいことは確かにそうですね。尤度比検定で行ってみます。

No.16055 Re: 多変量解析における変数選択について  【青木繁伸】 2011/12/23(Fri) 07:49

> 有意に相関がある変数を一緒に説明変数として用いてもよいのかがよくわからない

基本的 には,単相間だけでは判断できない。モデルを構成する独立変数で,実際にトレランス(VIF)を計算しなければものは言えない。それが多変量解析というも の。それに,単に「有意な相関」といっても,相関係数の値自体が大きいのか,そうではなくて,単にサンプルサイズが大きいために有意になっているのか(ま あ,たぶん,前者を言っているのだろうが)は大違い。

以下のような,サンプルサイズ50(控えめ),独立変数3個の例。
> d <- gendat(50, tri.mat(c(1, 0.8, 1, 0.8, 0.8, 1, 0.8, 0.8, 0.8, 1)))
> d <- data.frame(round(t(t(d)*10+50), 1))
> colnames(d) <- c(paste("X", 1:3, sep=""), "Y")
> head(d) # データの先頭 6 行
X1 X2 X3 Y
1 59.6 63.5 56.9 59.9
2 38.5 34.2 31.3 39.4
3 45.6 56.6 39.9 46.7
4 60.2 57.3 48.2 57.7
5 46.1 48.4 37.3 38.4
6 66.0 54.5 55.7 56.6
> round(cor(d), 3) # 相関係数 全部 0.8 いずれも P < 0.001 で高度に有意
X1 X2 X3 Y
X1 1.0 0.8 0.8 0.8
X2 0.8 1.0 0.8 0.8
X3 0.8 0.8 1.0 0.8
Y 0.8 0.8 0.8 1.0
> tolerance(d[,1:3]) # 3 変数全部を使うとしたときのトレランス 問題なし
tolerance VIF
X1 0.2887745 3.462910
X2 0.2884312 3.467031
X3 0.2889271 3.461080
> ans <- lm(Y~., d)
> summary(ans)

Call:
lm(formula = Y ~ ., data = d)

Residuals:
Min 1Q Median 3Q Max
-15.1386 -3.3462 0.6748 3.5368 10.3874

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.8510 4.1187 0.935 0.3547
X1 0.3071 0.1402 2.190 0.0337 *
X2 0.3084 0.1405 2.195 0.0333 *
X3 0.3075 0.1402 2.194 0.0333 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5.332 on 46 degrees of freedom
Multiple R-squared: 0.7385, Adjusted R-squared: 0.7214
F-statistic: 43.3 on 3 and 46 DF, p-value: 1.905e-13

> AICより変数増減法の方がいいことは確かにそうですね。尤度比検定で行ってみます。

いわゆる変数増減法は,変数の追加・削除を偏 F 値に基づいて行うもの。これだと,多重共線性を生じる変数は追加されない(追加されにくいだけかな?)。stepAIC でやるのもよいのかも。
上と同じようにシミュレーション。だだし,多重共線性ありの場合。
> round(cor(d), 3)
X1 X2 X3 Y
X1 1.00 0.95 0.85 0.8 # X1,X2 の相関が 0.95 と高い
X2 0.95 1.00 0.80 0.8
X3 0.85 0.80 1.00 0.8
Y 0.80 0.80 0.80 1.0
> tolerance(d[,1:3])
tolerance VIF
X1 0.07535856 13.269893 # トレランスは基準の 0.1 より低い
X2 0.09752310 10.253981 # トレランスは基準の 0.1 より低い
X3 0.27748214 3.603836
> sreg(d)
有効ケース数: 50
従属変数:   Y
平均値 不偏分散 標準偏差
X1 49.996 102.15 10.107
X2 50.006 102.08 10.103
X3 49.992 101.95 10.097
Y 49.996 102.16 10.107

***** 相関係数行列 *****
X1 X2 X3 Y
X1 1.00000 0.94990 0.84972 0.79982
X2 0.94990 1.00000 0.80016 0.79992
X3 0.84972 0.80016 1.00000 0.80022
Y 0.79982 0.79992 0.80022 1.00000

変数編入基準 Pin: 0.05
変数除去基準 Pout: 0.05
編入候補変数: X3 P : <0.001 ***** 編入されました

***** ステップ 1 ***** 編入変数: X3

偏回帰係数 標準誤差 t値 P値 標準化偏回帰係数 トレランス 分散拡大要因
X3 0.80104 0.086649 9.2447 <0.001 0.80022 1 1
定数項 9.95041 4.417486 2.2525 0.0289

平方和 自由度 平均平方 F値 P値
回帰 3205.4 1 3205.384 85.464 <0.001
残差 1800.3 48 37.506
全体 5005.7 49

#################### 途中大幅に省略
# 最終的なモデル

偏回帰係数 標準誤差 t値 P値 標準化偏回帰係数 トレランス 分散拡大要因
X3 0.44565 0.13083 3.4062 0.00136 0.44519 0.35974 2.7798
X2 0.44387 0.13075 3.3947 0.00140 0.44369 0.35974 2.7798
定数項 5.52113 4.20801 1.3121 0.19588

平方和 自由度 平均平方 F値 P値
回帰 3559.9 2 1779.942 57.863 <0.001
残差 1445.8 47 30.761
全体 5005.7 49

重相関係数 0.84331
決定係数(重相関係数の二乗) 0.71117
自由度調整済み重相関係数の二乗 0.69888
対数尤度 -155.05637
AIC 318.11273
> ans <- lm(Y~., d) ######### lm と stepAIC でやってみると
> library(stepAIC)
> stepAIC(ans)
Start: AIC=176.26
Y ~ X1 + X2 + X3

Df Sum of Sq RSS AIC
- X1 1 0.001 1446.8 174.26
1446.8 176.26
- X2 1 97.194 1544.0 177.51
- X3 1 272.870 1719.7 182.89

Step: AIC=174.26
Y ~ X2 + X3

Df Sum of Sq RSS AIC
1446.8 174.26
- X3 1 354.61 1801.4 183.22
- X2 1 356.38 1803.2 183.26

Call:
lm(formula = Y ~ X2 + X3, data = d)

Coefficients:
(Intercept) X2 X3
5.6149 0.4445 0.4433

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