No.04205 ダミー変数の中から不要なものを取り除きたい  【ロック】 2007/08/22(Wed) 13:54

こんにちは。

重回帰分析用に作成したダミー変数の中から線形結合している変数を取り除きたいのですが,線形結合している変数をどうすれば見つけられますか?

例えば,質的変数Aと質的変数Bがあるとき,
モデル=切片+A+B+A*B

モデル=切片+A+A*B
とでは,分析に用いるダミー変数が異なります。

もっとも,このような簡単な例では目で見てどこが線形結合しているか判断することができますが,もっと複雑なモデルとなったときには手に負えません。

どうぞご宜しくお願いします。

No.04207 Re: ダミー変数の中から不要なものを取り除きたい  【青木繁伸】 2007/08/22(Wed) 15:09

香川大学堀先生のページ
http://www.ec.kagawa-u.ac.jp/~hori/spss/eig0vec.txt

これをRで行うように書いた関数は,
http://aoki2.si.gunma-u.ac.jp/R/find_multico.html

SAS とか R では,従属な変数は取り除いてから分析してくれると思いますがいかが?

No.04208 Re: ダミー変数の中から不要なものを取り除きたい  【青木繁伸】 2007/08/22(Wed) 15:35

例題を分析してみました
オリジナルデータ(x1 は a,b,c の3カテゴリー,x2 は a,b,c,d の4カテゴリー)
x1	x2	y
c b 4
a a 1
b c 5
c d 11
b c 5
a a 2
b c 6
a b 0
x1, x2 ともに a をベースラインとしてダミー変数化すると以下のようになり,x1-b と x2-c が従属であることが分かる
x1-b	x1-c	x2-b	x2-c	x2-d
0 1 1 0 0
0 0 0 0 0
1 0 0 1 0
0 1 0 0 1
1 0 0 1 0
0 0 0 0 0
1 0 0 1 0
0 0 1 0 0
R では,x1, x2, は factor として読み込まれるので特に何の操作もせずに単純に重回帰分析するだけでよい
> df
x1 x2 y
1 c b 4
2 a a 1
3 b c 5
4 c d 11
5 b c 5
6 a a 2
7 b c 6
8 a b 0
> ans <- lm(y~x1+x2, df)
> summary(ans)

Call:
lm(formula = y ~ x1 + x2, data = df)

Residuals:
1 2 3 4 5 6 7 8
-8.004e-17 -5.000e-01 -3.333e-01 2.073e-17 -3.333e-01 5.000e-01 6.667e-01 4.848e-17

Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.5000 0.4410 3.402 0.04241 *
x1b 3.8333 0.5693 6.734 0.00669 **
x1c 4.0000 0.8819 4.536 0.02006 *
x2b -1.5000 0.7638 -1.964 0.14429
x2c NA NA NA NA
x2d 5.5000 1.1667 4.714 0.01807 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6236 on 3 degrees of freedom
Multiple R-Squared: 0.986, Adjusted R-squared: 0.9674
F-statistic: 52.93 on 4 and 3 DF, p-value: 0.004094
x2c の行に,見事に NA が並んでいる(すなわち,x2c は分析に使われなかったことを意味する)

複雑なモデルも何のその
> summary(lm(y~x2+x1:x2, df))

Call:
lm(formula = y ~ x2 + x1:x2, data = df)

Residuals:
1 2 3 4 5 6 7 8
3.112e-17 -5.000e-01 -3.333e-01 3.588e-17 -3.333e-01 5.000e-01 6.667e-01 -1.584e-16

Coefficients: (7 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.5000 0.4410 3.402 0.04241 *
x2b -1.5000 0.7638 -1.964 0.14429
x2c 3.8333 0.5693 6.734 0.00669 **
x2d 9.5000 0.7638 12.438 0.00112 **
x2a:x1b NA NA NA NA
x2b:x1b NA NA NA NA
x2c:x1b NA NA NA NA
x2d:x1b NA NA NA NA
x2a:x1c NA NA NA NA
x2b:x1c 4.0000 0.8819 4.536 0.02006 *
x2c:x1c NA NA NA NA
x2d:x1c NA NA NA NA
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6236 on 3 degrees of freedom
Multiple R-Squared: 0.986, Adjusted R-squared: 0.9674
F-statistic: 52.93 on 4 and 3 DF, p-value: 0.004094

No.04209 Re: ダミー変数の中から不要なものを取り除きたい  【ロック】 2007/08/22(Wed) 15:54

ご返信ありがとうございました。大変参考になりました。

この課題に対して自分でプログラムを作っていて,一応ベタベタな方法を見つけました。以下のような流れです。

1.ダミー変数を1列追加する。
2.ダミー変数全体の相関行列を求める。
3.相関行列の逆行列を計算する。
4.逆行列が解けないときは追加したダミー変数は使用しない。
  逆行列が解ければ追加したダミー変数は使用する。
5.1〜4を繰り返します。

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