首页 文章

glmulti与分数logit模型

提问于
浏览
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:replacement的长度为零

有谁知道我怎么能克服这个问题?

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)

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

相关问题