用分数logit模型进行glm多元回归

3

我想用以下命令拟合一个分数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 中的错误:替换长度为零

有人知道我如何解决这个问题吗?

可以请提供一个可复现的示例吗? - Ben Bolker
@Ben Bolker:在下面发布了一个答案,但仍然存在一个可能解决方案的问题 - 你知道怎么修复吗? - Tom Wenseleers
1个回答

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"" - 我不确定如何解决它... (这个想法是,这个解决方案将适当地重新拟合模型作为一个quasibinomial GLM,然后返回QAIC)

上面的第一个解决方案应该还可以...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接