A way of thinking

筆者個人の思考過程です。意見には個人差があります。

多変量の世界は険しい

##追記20130130
Rで総当たりでAICを計算する方法を探して,ここに来る人もいそうなので,一応ボクが参考にしたサイトを以下に。ボクはこれで総当たりでAICを計算させています。感謝。
http://ito-hi.blog.so-net.ne.jp/2008-06-04

##追記20121212
ステップワイズ法は,色んなソフトにデフォルトに入っている解析方法ですが,統計に理解がある人からすると「ダメな手法」ととらえられていることが多いようです*1。おそらくググればいくつか出てくると思いますが,例えば,ボクのブログだとここで問題点については少し触れています,代替方法はなんなのか?は,ケースバイケースで難しい問題なのかもしれませんが,例えば,(変数が少なければ)すべての説明変数を入れて解析するとか*2,あるいは説明変数のすべての組合せを考えてモデルのAICを比べる*3とか,まぁそのあたりになるのかと思います。AICの差が大きければ,ベストモデルだけでも議論は可能だと思います。

                                                                          • -

RのstepAICは意外に侮れない関数であることに気づいた。なんか前進の結果がおかしいなと思って,少し調べると,
res<-glm(Y~X1+X2+X3...)
というモデルを前進ステップワイズしたいときは,まず
res<-glm(Y~1)
としておいて,
stepAIC(res,scope=list(upper=~X1+X2+X3...,lower=~1),direction="forward")
としないといけない模様。
前進で変数増減法をしたい場合は,
stepAIC(res,scope=list(upper=~X1+X2+X3...,lower=~1),direction="both")
とすれば良い。
http://rbloger.blog51.fc2.com/tb.php/10-14bf27c7


逆に後進で,変数増減法をしたい場合は,
res<-glm(Y~X1+X2+X3...)
としておいて,
stepAIC(res,direction="both")
とすればよさげ。

思っていたより,ややこしい。ちなみに,ボクの解析したデータで,前進の変数増減法の方がAICが低かった。とか色々やっていましたが,結局総当たりが計算できるpackage(wle)で計算してみると,また様子が変わる。前進で変数増減法は最初に選ばれた変数がなかなか外れてこないというのがネックになってくるのかもしれない。しかし,多変量の世界は険しいということがよーく分かりました。

##追記081020
ISさんの相談をうけ,wleのmle.aicを使って総当たりでモデル選択し,glmを使ってその説明変数でAICを計算した結果から,mle.aicで最小となったモデルは,AIC最小のモデルではなかった(上で言うと,前進で変数増減の方がAICが小さかった)。また,下平さんのサイトにあるコードで総当たりすると,前進で変数増減で選ばれたモデルが最小となった。mle.aic自体,きちんと理解して使っていないので,使い方に間違いがあるせいなのかもしれませんが。今のところ,なぜmle.aicでうまく計算できないのか不明。とりあえずここまで。あと上記下平さんのPDFにもあるlibrary(leaps) のregsubsets()という関数を使ったやつでも同じ結果になったので,汎用的には,こちらの方が良いかもしれない。
##追記110222
説明書をきちんと読めば良かったのですが,lm()用のようです。

*1:使い方にはよるかもしれません

*2:この方法に批判的な人も少なからずいると思います

*3:赤池ウェイトとかを使うとDavid Andersonさんが言うmultimodel inferenceになると思います