Пусть DGP будет
n <- 1000
x <- rnorm(n)
id <- rep(1:2, each = n / 2)
y <- 1 * (rnorm(n) > 0)
так что мы будем под нулевой гипотезой. Как сказано в ?bife
, когда нет коррекции смещения, все то же, что и с glm
, за исключением скорости. Итак, начнем с glm
.
modGLM <- glm(y ~ 1 + x + factor(id), family = binomial())
modGLM0 <- glm(y ~ 1, family = binomial())
Один из способов выполнить тест LR -
library(lmtest)
lrtest(modGLM0, modGLM)
# Likelihood ratio test
#
# Model 1: y ~ 1
# Model 2: y ~ 1 + x + factor(id)
# #Df LogLik Df Chisq Pr(>Chisq)
# 1 1 -692.70
# 2 3 -692.29 2 0.8063 0.6682
Но мы можем сделать это и вручную,
1 - pchisq(c((-2 * logLik(modGLM0)) - (-2 * logLik(modGLM))),
modGLM0$df.residual - modGLM$df.residual)
# [1] 0.6682207
Теперь давайте перейдем к bife
.
library(bife)
modBife <- bife(y ~ x | id)
modBife0 <- bife(y ~ 1 | id)
Здесь modBife
- полная спецификация, а modBife0
- только с фиксированными эффектами. Для удобства пусть
logLik.bife <- function(object, ...) object$logl_info$loglik
для извлечения логарифмического правдоподобия. Тогда мы можем сравнить modBife0
с modBife
, как в
1 - pchisq((-2 * logLik(modBife0)) - (-2 * logLik(modBife)), length(modBife$par$beta))
# [1] 1
, тогда как modGLM0
и modBife
можно сравнить, запустив
1 - pchisq(c((-2 * logLik(modGLM0)) - (-2 * logLik(modBife))),
length(modBife$par$beta) + length(unique(id)) - 1)
# [1] 0.6682207
, который дает тот же результат, что и раньше, хотя с bife
у нас по умолчанию есть коррекция смещения.
Наконец, в качестве бонуса, мы можем смоделировать данные и увидеть, что тест работает так, как должен. 1000 итераций ниже показывают, что оба теста (так как два теста одинаковы) действительно отклоняют так часто, как это должно быть при нулевом значении.