我想用命令:
来拟合小数logit模型glmfit <- glm(tr1 ~ period + male + stib+ income,
family = quasibinomial(link = "logit"), data=mydata)
tr1
是一个介于0和1之间的变量(包括一些零)。
我现在想要选择具有最小QAIC值的模型(即测试自变量的可能组合并检查得到的QAIC值)。为此,我尝试在R:
中应用glmulti
命令
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中的错误:替换的长度为零
有谁知道如何克服这个问题?
答案 0 :(得分:0)
对我来说这很有效:
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)
上面的第一个解决方案应该没问题,但我认为......