Как построить таблицу выбора модели AIC с помощью моделей mlogit

Я пытаюсь создать таблицу AIC для моего набора моделей-кандидатов в R, которые были запущены с использованием mlogit. Раньше я использовал glm и glmer и всегда использовал пакеты AICcmodavg и aictab для извлечения значений и создания таблицы выбора модели. Этот пакет, похоже, не работает для mlogit, поэтому мне интересно, есть ли какие-либо другие способы создания таблицы AIC в R, кроме ручного расчета с использованием значения логарифма правдоподобия?

Пример вывода модели mlogit:

Call:
mlogit(formula = Case ~ Dist_boulder + Mesohabitat + Depth + 
    Size + Size^2 | -1, data = reach.dc, method = "nr")

Frequencies of alternatives:
0 1 2 3 
1 0 0 0 

nr method
5 iterations, 0h:0m:0s 
g'(-H)^-1g = 1.19E-05 
successive function values within tolerance limits 

Coefficients :
                   Estimate Std. Error z-value Pr(>|z|)  
Dist_boulder      -0.052165   0.162047 -0.3219  0.74752  
Mesohabitatriffle -1.400752   0.612329 -2.2876  0.02216 *
Mesohabitatrun     0.302697   0.420181  0.7204  0.47128  
Depth              0.137524   0.162521  0.8462  0.39745  
Size               0.336949   0.145036  2.3232  0.02017 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Log-Likelihood: -86.627

пример запуска моделей (из моего набора кандидатов 14)

 predation.reach<-mlogit(Case ~ Dist_boulder + Mesohabitat + Depth + Size + Size^2 | -1, data=reach.dc)
velocity.reach<-mlogit(Case ~ Mid_vel | -1, data=reach.dc)
spaces.reach<-mlogit(Case~ Embedded + Class | -1, data=reach.dc)
substrate.reach<-mlogit(Case ~ Class | -1, data=reach.dc)

определение списка набора кандидатов

cand.set.reach<-list(predation.reach, velocity.reach, spaces.reach, substrate.reach)

person Lauren Diaz    schedule 15.09.2019    source источник
comment
broom::augment() будет подходящим вариантом, но еще не ... github.com/tidymodels/broom/ issues / 192 bbmle::AICtab() работает ...?   -  person Ben Bolker    schedule 15.09.2019


Ответы (1)


bbmle::AICtab(), похоже, работает.

library("mlogit")
m1 <- mlogit(formula = mode ~ price + catch | income,
  data = Fish,     
  alt.subset = c("charter", "pier", "beach"), method = "nr")
m2 <- update(m1, . ~ . - price)
bbmle::AICtab(m1,m2)
##    dAIC  df
## m1   0.0 6 
## m2 412.1 5 

По умолчанию bbmle::AICtab() дает только дельта-AIC и степени свободы модели / количество параметров, но вы можете использовать дополнительные аргументы для получения абсолютных AIC, весов AIC и т. Д.

Он также работает со списком:

L <- list(m1,m2)
bbmle::AICtab(L)

В мире tidyverse,

library(broom)
L %>% purrr::map(augment) %>% bind_rows()

должно работать, но пока не работает.

person Ben Bolker    schedule 15.09.2019