glmulti与分数logit模型

时间:2016-03-02 18:27:49

标签: r glm

我想用命令:

来拟合小数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中的错误:替换的长度为零

有谁知道如何克服这个问题?

1 个答案:

答案 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)

上面的第一个解决方案应该没问题,但我认为......