Rの尤度比検定


25

次のように、いくつかの独立変数に対して単変量ロジスティック回帰を行うと仮定します。

mod.a <- glm(x ~ a, data=z, family=binominal("logistic"))
mod.b <- glm(x ~ b, data=z, family=binominal("logistic"))

このコマンドにより、モデルがnullモデルよりも優れているかどうかを確認するために、モデルの比較(尤度比検定)を行いました。

1-pchisq(mod.a$null.deviance-mod.a$deviance, mod.a$df.null-mod.a$df.residual)

次に、すべての変数を含む別のモデルを作成しました

mod.c <- glm(x ~ a+b, data=z, family=binomial("logistic"))

変数が多変量モデルで統計的に有意であるかどうかを確認するために、lrtest次のコマンドを使用しましたepicalc

lrtest(mod.c,mod.a) ### see if variable b is statistically significant after adjustment of a
lrtest(mod.c,mod.b) ### see if variable a is statistically significant after adjustment of b

場合、私は疑問に思うpchisq方法及びlrtest方法は対数尤度テストを行うための等価ですか?lrtestロジスティックモデルを統一する方法を知らないので。


@Gavin、私に思い出させてくれてありがとう、stackoverflowと比較して、答えが適切かどうかを決定する前に、答えを「消化する」ためにもっと時間を費やす必要があります。
lokheart

lmtestのwaldtestの使用はお勧めしません。モデルのテストにはaodパッケージを使用します。そのはるかに簡単です。cran.r-project.org/web/packages/aod/aod.pdf
Mr. Nobody

epicalc削除されました(source)。代替案は可能性がありますlmtest
マーティントーマ

回答:


21

基本的に、はい、対数尤度の正しい違いを使用する場合:

> library(epicalc)
> model0 <- glm(case ~ induced + spontaneous, family=binomial, data=infert)
> model1 <- glm(case ~ induced, family=binomial, data=infert)
> lrtest (model0, model1)
Likelihood ratio test for MLE method 
Chi-squared 1 d.f. =  36.48675 , P value =  0 
> model1$deviance-model0$deviance
[1] 36.48675

両方のケースで同じであるヌルモデルの逸脱ではありません。dfの数は、2つのネストされたモデル間で異なるパラメーターの数です。ここではdf = 1です。ところで、lrtest()入力するだけでソースコードを見ることができます

> lrtest

Rプロンプトで。


おかげで、NULLモデルを作成するためにglm(output〜NULL、data = z、family = binomial( "logistic"))を使用できるため、後でlrtestを使用できることがわかりました。
参考

2
@lokheart anova(model1, model0)も動作します。
-chl

5
@lokheart glm(output ~ 1, data=z, family=binomial("logistic"))は、より自然なヌルモデルになります。これはoutput、定数項(インターセプト)によって説明されます。インターセプトはすべてのモデルに含まれているaため、インターセプトを考慮した後の効果をテストしています。
モニカの復職-G.シンプソン

または、「手動」で行うこともできます。LRテストのp値= 1-pchisq(deviance、dof)
Umka

22

別の方法は、単一のモデルを受け入れる機能をlmtest持つパッケージlrtest()です。パッケージ?lrtest内の例は次のlmtestとおりです。LM用ですが、GLMで機能するメソッドがあります。

> require(lmtest)
Loading required package: lmtest
Loading required package: zoo
> ## with data from Greene (1993):
> ## load data and compute lags
> data("USDistLag")
> usdl <- na.contiguous(cbind(USDistLag, lag(USDistLag, k = -1)))
> colnames(usdl) <- c("con", "gnp", "con1", "gnp1")
> fm1 <- lm(con ~ gnp + gnp1, data = usdl)
> fm2 <- lm(con ~ gnp + con1 + gnp1, data = usdl)
> ## various equivalent specifications of the LR test
>
> ## Compare two nested models
> lrtest(fm2, fm1)
Likelihood ratio test

Model 1: con ~ gnp + con1 + gnp1
Model 2: con ~ gnp + gnp1
  #Df  LogLik Df  Chisq Pr(>Chisq)    
1   5 -56.069                         
2   4 -65.871 -1 19.605  9.524e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 
>
> ## with just one model provided, compare this model to a null one
> lrtest(fm2)
Likelihood ratio test

Model 1: con ~ gnp + con1 + gnp1
Model 2: con ~ 1
  #Df   LogLik Df  Chisq Pr(>Chisq)    
1   5  -56.069                         
2   2 -119.091 -3 126.04  < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

+1知っておくといいです(そのパッケージを忘れていたようです)。
chl

2
@GavinSimpsonこれはばかげて見えるかもしれませんが、「lrtest(fm2、fm1)」の結果をどのように解釈しますか?モデル2はモデル1とは大きく異なるため、con1変数の追加は有用でしたか?または、lrtest(fm2)は、モデル2がモデル1と大きく異なると言っていますか?しかし、どのモデルが優れていますか?
ケリー14

5
@Kerry fm1は対数尤度が低いため、に比べて適合度が低くなりますfm2。LRTは、モデル間で異なる用語が有用な場合(応答の説明)、fm1モデルを作成した程度fm2が予想外に大きいことを示しています。lrtest(fm2)とまったく比較さfm1れません。fm2その場合、出力に記載されているように、次の場合にモデルが比較されますcon ~ 1。そのモデル、つまりヌルモデルは、の最適な予測子concon(切片/定数項)のサンプル平均であると言います。
モニカの復活-G.シンプソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.