lrtest()がanova(test =“ LRT”)と一致しないのはなぜですか


15

モデルの適合度を比較するために、Rで尤度比検定を行う方法を探していました。私が最初にそれを自分でコード化され、デフォルトの両方見つかったanova()機能ともlrtest()lmtestパッケージ。ただし、チェックするとanova()、「test」パラメータが「LRT」に設定されていても、常に他の2つの値とはわずかに異なるp値が生成されます。はanova()、実際にいくつかの微妙に異なるテストを実行する、または私は何かを理解していないのですか?

プラットフォーム:Linux Mint 17で実行されているR 3.2.0 lmtestバージョン0.9-33で

サンプルコード:

set.seed(1) # Reproducibility
n=1000
y = runif(n, min=-1, max=1)
a = factor(sample(1:5, size=n, replace=T))
b = runif(n)

# Make y dependent on the other two variables
y = y + b * 0.1 + ifelse(a==1, 0.25, 0)
mydata = data.frame(y,a,b)

# Models
base = lm(y ~ a, data=mydata)
full = lm(y ~ a + b, data=mydata)

# Anova
anova(base, full, test="LRT")

# lrtest
library(lmtest)
lrtest(base, full)

# Homebrew log-likelihood test
like.diff = logLik(full) - logLik(base)
df.diff = base$df.residual - full$df.residual
pchisq(as.numeric(like.diff) * 2, df=df.diff, lower.tail=F)

実行すると、anova()p値が0.6071になり、他の2つは0.60599になります。わずかな違いですが、一貫性があり、浮動小数点数の格納方法が不正確になるには大きすぎます。誰かanova()が別の答えを出す理由を説明できますか?

回答:


7

テスト統計の取得方法は異なります。anova.lmlist残差平方和のスケーリングされた差を使用します。

anova(base, full, test="LRT")
#  Res.Df    RSS Df Sum of Sq Pr(>Chi)
#1    995 330.29                      
#2    994 330.20  1   0.08786   0.6071

vals <- (sum(residuals(base)^2) - sum(residuals(full)^2))/sum(residuals(full)^2) * full$df.residual 
pchisq(vals, df.diff, lower.tail = FALSE)
#[1] 0.6070549

16

前の回答で述べたように、違いはスケーリングの違い、つまり、誤差の標準偏差の異なる推定量になります。違いの原因は(1)スケーリングnk (不偏OLS推定量)対スケーリング n (バイアスML推定量)、および(2)帰無仮説または代替の推定量を使用します。

で実装された尤度比検定でlrtest()は、各モデルのML推定量を個別にanova(..., test = "LRT")使用し、代替のOLS推定量を使用します。

sd_ols <- function(object) sqrt(sum(residuals(object)^2)/df.residual(object))
sd_mle <- function(object) sqrt(mean(residuals(object)^2))

次に、lrtest()計算する統計は

ll <- function(object, sd) sum(dnorm(model.response(model.frame(object)),
  mean = fitted(object), sd = sd, log = TRUE))
-2 * (ll(base, sd_mle(base)) - ll(full, sd_mle(full)))
## [1] 0.266047

anova(..., test = "LRT") 一方、使用

-2 * (ll(base, sd_ols(full)) - ll(full, sd_ols(full)))
## [1] 0.2644859

帰無仮説では、どちらも漸近的に等価ですが、もちろん、有限のサンプルではわずかな違いがあります。


1
答えてくれてありがとう。それで、1つのバリアントが他のバリアントより優れていると言えますか?心配なくanova-testを使用できますか?
ジュリアン

1
この質問に関する理論的な結果はわかりませんが、ガウス誤差のある小さなサンプルでOLSバリアントのパフォーマンスがわずかに向上しても驚かないでしょう。しかし、すでに適度に大きなサンプルでは、​​違いは無視できるはずです。
アヒムザイレイス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.