glmulti с дробной моделью логита

Я хочу установить модель дробного логита с помощью команды:

glmfit <- glm(tr1 ~ period + male + stib+ income, 
   family = quasibinomial(link = "logit"), data=mydata)

куда tr1 переменная, которая лежит между нулем и единицей (включая некоторые нули).

Теперь я хочу выбрать модель с наименьшим значением QAIC (т. Е. Проверить возможные комбинации независимых переменных и проверить полученные значения QAIC). Для этого я попытался применить glmulti команда в R:

require("glmulti")
glmulti.out <- glmulti(tr1 ~ period + male + stib+ income, 
  data = mydata,crit = "qaic", 
   confsetsize = 5, fitfunction = "glm", 
   family = quasibinomial(link = "logit"))       

Тем не менее, я постоянно получаю следующую ошибку, и я не могу понять, почему:

Ошибка в lesCrit[sel] = cricri: длина замены равна нулю

Кто-нибудь знает, как я смог преодолеть эту проблему?

1 ответ

Для меня это сработало:

library(bbmle)
qaicmod = function (fit) qAIC(fit, dispersion=with(fit,sum((weights * residuals^2)[weights > 0])/df.residual) ) 

glmulti.out <- glmulti(tr1 ~ period + male + stib+ income, 
  data = mydata,crit = "qaicmod", 
   confsetsize = 5, fitfunction = "glm", 
   family = binomial(link = "logit"))

При этом используется обычный биномиальный GLM, но вычисляется QAIC на основе оцененного коэффициента дисперсии. В аргументе дисперсии функции qaicmod вы также можете поместить оценочный коэффициент дисперсии полного квазибиномиального GLM со всеми включенными переменными (некоторые статистические данные, которые я видел, рекомендуют это), т.е. использовать вместо этого

disp <<- summary(fullmodel)$dispersion
qaicmod = function (fit) qAIC(fit, dispersion=disp) 

Наконец, я также попытался использовать

library(MuMIn)
x.quasibinomial <<- function(...) {
res <- quasibinomial(...)
res$aic <- binomial(...)$aic
res
}
qaicmod <<- function (fit) QAIC(update(fit, family = x.quasibinomial), chat = deviance(fit) / df.residual(fit))

glmulti.out <- glmulti(tr1 ~ period + male + stib+ income, 
      data = mydata,crit = "qaicmod", 
       confsetsize = 5, fitfunction = "glm", 
       family = binomial(link = "logit"))

но это возвращает ошибку "Error in eval(expr, envir, enclos) : could not find function "fitfunc"" - не уверен, как я могу это исправить... (Идея состояла бы в том, что это решение должным образом перефразирует модель как квазибиномиальный GLM, а затем вернет QAIC из этого)

Первое решение выше должно быть в порядке, хотя я думаю...

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