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