Хорошая пригодность для модели с фиксированным эффектом и использованием пакета "Bife"

Я использую пакет 'bife' для запуска модели логита с фиксированным эффектом в R. Однако я не могу вычислить какую-либо пригодность для измерения общего соответствия модели, учитывая результат, который я имею ниже. Я был бы признателен, если бы я мог знать, как измерить добротность, учитывая эту ограниченную информацию. Я предпочитаю тест хи-квадрат, но все еще не могу найти способ реализовать это.

    ---------------------------------------------------------------                 
    Fixed effects logit model                   
    with analytical bias-correction                 

    Estimated model:                    
    Y ~ X1 +X2 + X3 + X4 + X5 | Z                   

    Log-Likelihood= -9153.165                   
    n= 20383, number of events= 5104                    
    Demeaning converged after 6 iteration(s)                    
    Offset converged after 3 iteration(s)                   

    Corrected structural parameter(s):                  

        Estimate    Std. error  t-value Pr(> t) 
    X1  -8.67E-02   2.80E-03    -31.001 < 2e-16 ***
    X2  1.79E+00    8.49E-02    21.084  < 2e-16 ***
    X3  -1.14E-01   1.91E-02    -5.982  2.24E-09    ***
    X4  -2.41E-04   2.37E-05    -10.171 < 2e-16 ***
    X5  1.24E-01    3.33E-03    37.37   < 2e-16 ***
    ---                 
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1                  

    AIC=  18730.33 , BIC=  20409.89                     


    Average individual fixed effects= 1.6716                    
    ---------------------------------------------------------------                 

1 ответ

Решение

Пусть 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 итераций ниже показывают, что оба теста (так как два теста одинаковы) действительно отклоняют так часто, как это должно быть при нулевом значении.

Другие вопросы по тегам