No.10968 logistic regressionの検定?  【taipapa】 2009/10/01(Thu) 01:07

お世話になります.
71人の症例解析をしています.Aの有無について13個の説明変数(factor, numeric両方あり)を用いてlogistic regression modelを作成しました.ソフトはRです.
X1 <- glm(A ~ B+C+D+E+F+G+H+I+J+K+L+M+N, family=binomial)
とやって,

summary(X1)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -9.95271 7.10568 -1.401 0.16131
A -0.04517 0.07688 -0.588 0.55682
B -3.00570 1.69293 -1.775 0.07583 .
C -0.43878 0.99869 -0.439 0.66041
D -0.29527 0.92250 -0.320 0.74891
E -0.01733 0.04965 -0.349 0.72701
F 0.24296 1.17314 0.207 0.83593
G 7.93421 2.72729 2.909 0.00362 **
H -0.58603 1.16660 -0.502 0.61543
I 1.29045 1.02075 1.264 0.20615
J 3.48736 1.84493 1.890 0.05873 .
K 0.21681 1.01196 0.214 0.83035
L 1.21286 1.01301 1.197 0.23120
M 1.22595 1.02376 1.197 0.23111
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

Null deviance: 78.161 on 70 degrees of freedom
Residual deviance: 44.011 on 57 degrees of freedom
AIC: 72.011

Number of Fisher Scoring iterations: 6
の結果を得ました.

また,
anova(X1, test="Chisq")とやって,
Analysis of Deviance Table

Model: binomial, link: logit

Response: postopDWI.HI

Terms added sequentially (first to last)

Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL 70 78.161
A 1 1.156 69 77.005 0.282
B 1 0.065 68 76.940 0.799
C 1 1.639 67 75.301 0.200
D 1 0.008 66 75.293 0.929
E 1 0.240 65 75.053 0.624
F 1 4.435 64 70.618 0.035
G 1 15.874 63 54.744 6.77e-05
H 1 1.229 62 53.515 0.268
I 1 2.504 61 51.011 0.114
J 1 3.612 60 47.399 0.057
K 1 0.082 59 47.318 0.775
L 1 1.702 58 45.615 0.192
M 1 1.604 57 44.011 0.205
の結果を得ました.
ごらんのように,偏回帰係数の有意なもの(変数B,G,J?)と,尤度比検定で有意なもの(変数F,G,J?)がすこし異なっており,ここからどの因子を減らすか迷っています.どのように考えるべきなのでしょうか?
このように両者が異なる時にどうしたら良いのかご教示いただければ幸いです.

No.10975 Re: logistic regressionの検定?  【青木繁伸】 2009/10/01(Thu) 14:08

私はよくわからないのですけど,anova は変数の追加によって Resid. Dev が減少していくのを,その減少量によってその時点で追加された変数の有意性を見ているのだと思います(Terms added sequentially (first to last) って書いてありますしね)。要するに,追加順を変えれば,同じ変数であってもその P 値は違ってきます。以下のような例をご覧になれば明らか?つまり,A ~ B+C と A ~ C+B で結果が違う。
それに対し て,summary で表示される glm の結果は,すべての変数が存在すると言う条件下で,他の変数をコントロールしたときにその変数の係数が0であるかどうかを検定しているので,変数の追加順 は無関係ということです。ということで,用途にもよるのですが,変数選択には summary(glm(...)) の結果を使うべきではないですか?
> d <- data.frame(A=sample(0:1, 100, replace=TRUE), B=rnorm(100), C=rnorm(100))
> anova(glm(A ~ B+C, data=d, family=binomial), test="Chisq")
Analysis of Deviance Table

Model: binomial, link: logit

Response: A

Terms added sequentially (first to last)

Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL 99 137.628
B 1 0.120 98 137.508 0.7294 B --> C の順に追加
C 1 0.108 97 137.400 0.7427
> anova(glm(A ~ C+B, data=d, family=binomial), test="Chisq")
Analysis of Deviance Table

Model: binomial, link: logit

Response: A

Terms added sequentially (first to last)

Df Deviance Resid. Df Resid. Dev P(>|Chi|)
NULL 99 137.628
C 1 0.066 98 137.562 0.7978 C --> B の順に追加
B 1 0.162 97 137.400 0.6876

No.10978 Re: logistic regressionの検定?  【taipapa】 2009/10/01(Thu) 17:27

青木先生,非常に納得できるアドバイスを有り難うございます.
私自身,anova(X1,X2, test="Chisq") などとしてモデル間の比較をしていたのですが,anova(X1, test="Chisq")の時の意味を初めてちゃんと理解できました.うーむ,Rの出力は1行たりとも見落としてはなりませんね.というか,私がモノ知 らずなだけでしょうが.....(^^;;;
これで,安心して次の段階へ進めます.

No.10983 Re: logistic regressionの検定?  【波音】 2009/10/01(Thu) 23:35

anova()は引数に2つのモデル(オブジェクト)を指定すると,2つのモデルの比較を行いますが,1つだけの場合はヌルモデルからglm()でモデル指定した説明変数の順に変数を加えていく様子を返してくれます。

係 数表のp値をみて変数を削除するのも1つの手ですが,anova()が返してくれる結果を見るのが良い場合もあります。仮にp値を参考に変数を削除して いって,最終的にいくつかの(どれが最適なモデルであるか)微妙なモデルが候補としてあがったときは,anova(model1, model2, ...)などとして,ある変数を含めた場合とそうでない場合を比較できますからね。

anova()に1つのモデルを指定した場合でも, B, D, E, Kなどはそれほど重要でない変数であろうと疑えますし,F, G, Jなどはかなり重要な変数ではないかと"思え"ます。しかし,おっしゃるとおり,係数表のBについてのp値を見ると有意に近い(0.07583)。すると Aという変数は説明変数に含めることによって,Bの説明率を下げるような変数であろうか・・・ とか考えられるわけです(だから実際にはBは重要な変数だ けれども,Aを含めるとゴミと判断されかねないということがanova()から分かるわけです)。

今出先なのですぐに確認できませんが,特に名義・順序ロジットモデルのときは正確なp値を計算するのがうんぬんかんぬんという話題がありまして,計算されたp値で判断してはならないこともあると書いてありました。

いずれにしても,今回の解析例を見る限りでは,p値が0.8とかいう大きなものから少しずつ削除していくのが常套手段ですね。

No.10990 Re: logistic regressionの検定?  【taipapa】 2009/10/03(Sat) 01:11

波音さん,貴重な情報有り難うございます.
「名義・順序ロジットモデルのときは正確なp値を計算するのが うんぬんかんぬんという話題がありまして,計算されたp値で判断してはならないこともある」と書いてある情報源を是非教えてください.A, F, G, Hは連続変数,それ以外はyes/noの2値変数ですので,気になるところです.p値ではなく,AICかなにかで判断するのでしょうか???

No.10993 Re: logistic regressionの検定?  【波音】 2009/10/03(Sat) 09:20

はい,お家に帰ったらその資料(本だったか論文だったか・・・^^;)を確認して提示いたします。

> p値ではなく,AICかなにかで判断するのでしょうか???

ちなみにですが,Rのglm()では切片や係数についてのp値が出力されますが,S-PLUSだとp値は出力されません。lm()では出力されるのですが。

想像に過ぎませんが,S-PLUSの大元(開発者)は,一般化線形モデルでは尤離度(anova()の結果など)を参考にモデル解析を行うべきというこだわりがあるのかも,と。

t値(Rだとz値)から有意であるかどうかを目算できるのだから,そもそも係数に対する検定は尤離度解析と比べて補助的なものと考えているのかもしれません(^_^;)

No.11009 Re: logistic regressionの検定?  【波音】 2009/10/04(Sun) 19:15

> 名義・順序ロジットモデルのときは正確なp値を計算するのがうんぬんかんぬんという話題

ドンピシャでどの資料を見たのか定かではありませんが,今回の件について参考になるであろうものを(いずれも日本語訳版):

「Sと統計モデル(Statistical Models in S)」共立出版
(解析手順というより,Sのglm()の中身についての説明があります)

「S-PLUSによる統計解析(Modern applied statistics with S)」シュプリンガー・フェアラーク東京
(例題をあげて,解析手順を詳しく示しています)

「一般線形モデル入門(An Introduction to Generalized Linear Models)」共立出版

「カテゴリカルデータ解析入門(An Introduction to Categorical Data Analysis)」サイエンティスト社

2値ロジットモデルの問題点については,「S-PLUSによる統計解析」に述べられていますが(係数の推定値に対する検定について),これはhttp://books.google.co.jp/books?id=974c4vKurNkC&printsec=frontcover&dq=Modern+Applied+statistics+with+S&as_brr=3&ei=pXHISp3mPILckATtgv2rAw#v=onepage&q=&f=falseで読めます。7章2節のProblems with Binomial GLMsという部分がそうです。

Sの話だからRでは当てはまらない部分もありますが。。。

No.11017 Re: logistic regressionの検定?  【taipapa】 2009/10/05(Mon) 01:17

波音さん,資料のご紹介有り難うございます.
かの有名なVenables & Ripley本ですね.とりあえず,フリーで読めるこれから読んでみます.こんな時は,Google books有り難いですね.

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