Качество подгонки для логит-модели с фиксированным эффектом с использованием пакета «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                    
    ---------------------------------------------------------------                 

person Eric    schedule 08.11.2018    source источник
comment
Какие именно критерии качества вы ищете? Можно извлечь остатки из bife объектов, а также оценить различные характеристики. Так что вы не так ограничены в конце концов.   -  person Julius Vainora    schedule 10.11.2018
comment
Джулиус Вайнора: Я предпочитаю критерий хи-квадрат.   -  person Eric    schedule 11.11.2018


Ответы (1)


Пусть ДГП будет

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

введите описание изображения здесь

person Julius Vainora    schedule 11.11.2018
comment
Спасибо. Я знаю, как извлекаются степени свободы для использования в glm, но не уверен, как это работает для указанной вами длины функции bife (modBife $par $ beta). Если я пытаюсь просто взять значения логарифмического правдоподобия просто для ввода в функцию pchisq без использования какой-либо функции наращивания, которую вы гипотетически создали, из какой части я должен взять значения длины (modBife$par$beta)? - person Eric; 12.11.2018
comment
Вектор modBife$par$beta содержит все бета-коэффициенты (без фиксированных эффектов, без перехвата). При тестировании modBife0 (полная модель) и modBife (только фиксированные эффекты) именно эти бета-коэффициенты мы установили равными нулю. Итак, если я правильно понимаю ваш вопрос, length(modBife$par$beta) в обычном выводе будет соответствовать количеству переменных: 5 в вашем примере (X1, ..., X5). - person Julius Vainora; 12.11.2018
comment
Я также перейду к объяснению length(modBife$par$beta) + length(unique(id)) - 1. Здесь мы тестируем полную модель только на перехвате. Тогда причина length(modBife$par$beta) остается прежней. Далее обнуляем все фиксированные эффекты, а их length(unique(id)). Но в полной модели у нас также нет перехвата. Итак, от length(unique(id)) небета-коэффициентов мы переходим к 1 (перехвату), отсюда и length(unique(id)) - 1 степеней свободы. - person Julius Vainora; 12.11.2018
comment
Спасибо. Если длина (уникальный (id)) становится равной 1, поскольку это перехват, как вы сказали, и снова вычитаете 1, чтобы получить степени свободы, не будет ли это снова сама длина (modBife $ par $ beta), как раньше? Если да, то я думаю, что ответы должны быть одинаковыми? - person Eric; 12.11.2018
comment
Например, в моем примере у нас есть a1*id1 + a2*id2 + b1*x в полной модели (где a1 и a2 — фиксированные эффекты, id1 и id2 — отдельные фиктивные переменные). Тогда минимальная модель будет просто перехватом*1. Итак, количество степеней свободы = 2 = 1 (бета) + 2 (фиксированные эффекты) - 1 (перехват возвращается). Другими словами, несмотря на length(unique(id)) фиксированных эффектов, мы теряем одну степень свободы из-за того ограничения, что сумма всех этих фиктивных переменных всегда равна 1. - person Julius Vainora; 12.11.2018
comment
Мой идентификатор (так называемый Z в моем примере) не является частью моих регрессоров. Он рассматривается как временная переменная, которая не включена ни в какие показатели бета-коэффициентов. Когда я запускаю length(regress$par$beta) по моей модели под названием 'regress', как в моем примере выше, я получаю 5. Однако, как вы можете видеть из моего примера, Z, который соответствует id, который вы делаете, не включен в регрессорах. Поэтому, если я запускаю нулевую модель, которая устанавливает Y ~ 1, используя length(unique(Z)) я получаю 207, что не имеет никакого смысла. Или это имеет смысл для вас? - person Eric; 12.11.2018
comment
В любом случае, что бы это ни было, я получаю 0, если буду следовать вашему нижнему методу, что кажется хорошим знаком. Затем я просто хотел бы проверить, действительно ли ((-2 * logLik(modGLM0)) - (-2 * logLik(modBife))) является значением хи-квадрата, о котором я могу сообщить. В моем случае я получаю 2711,83 для этого значения хи-квадрат и задаюсь вопросом, можно ли это сообщить. Вероятно, тогда length(unique(Z)) = 207 имеет смысл. - person Eric; 12.11.2018
comment
Тогда, наконец, могу ли я узнать, как я могу получить значение R2 для этого, пожалуйста? - person Eric; 12.11.2018
comment
В любом случае, я думаю, что length(unique(Z))=207 может иметь смысл, поскольку длина моего уникального идентификатора действительно равна 207, хотя Z не является частью моих регрессоров, как в приведенном выше примере bife, в то время как вы вставляете свой пример glm со знаком плюс как часть регрессоров. - person Eric; 12.11.2018
comment
@Eric, по поводу 1-го комментария: length(unique(Z)) быть 207 должно иметь смысл (в этом случае я добавлю результаты тестового моделирования сегодня или завтра). Относительно 2-го комментария: правильно, это значение для отчета, и действительно, хи-квадрат принимает большее значение с большим количеством степеней свободы. Мой идентификатор точно такой же, как ваш Z: это фиксированные эффекты (фиктивные переменные для каждого человека или, в вашем случае, для каждого периода времени) с оценочными значениями, указанными в modBife$par$alpha. Re R^2: в логистической регрессии больше нет четкого R^2; есть несколько предложений. Одним из них является R ^ 2 Макфаддена, заданный c(1- logLik(modBife) / logLik(modGLM0)). - person Julius Vainora; 12.11.2018
comment
@ Эрик, возвращаясь к length(unique(Z)), все в порядке, за исключением того, что вам нужно помнить о соотношении n / length(unique(Z)). Чем он больше, тем лучше. В противном случае тест может работать плохо. - person Julius Vainora; 12.11.2018
comment
Еще раз большое спасибо Юлий! - person Eric; 12.11.2018
comment
Ваши вторые модели bife выдают предупреждение Error in [[<-.data.frame(*tmp*, x, value = raw(0)) : замена имеет 0 строк, данные имеют 1000. Было ли обновление, из-за которого этот код больше не работает? - person Jakob; 11.09.2019
comment
@PeterPan, видимо, да. - person Julius Vainora; 12.09.2019
comment
@JuliusVainora хорошо, давайте дадим авторам немного времени, это все еще предварительная версия 1. Возможно, теперь пропущенная статистика снова появится в следующем обновлении :) - person Jakob; 16.09.2019