【问题标题】:glmulti with a fractional logit modelglmulti 与分数 logit 模型
【发布时间】:2016-03-02 18:27:48
【问题描述】:

我想用以下命令拟合分数 logit 模型:

glmfit <- glm(tr1 ~ period + male + stib+ income, 
   family = quasibinomial(link = "logit"), data=mydata)

其中tr1 是一个介于零和一之间(包括一些零)的变量。

我现在想选择具有最小 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 :在下面发布了一个答案,但仍然有一个可能的解决方案存在问题 - 你知道如何解决这个问题吗?

标签: r glm


【解决方案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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2021-07-20
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多