You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MuMIn::model.sel()时遇nobs方法缺失错误的技术求助

解决uGamm gam对象模型选择时的nobs.default报错问题

报错原因

你遇到的Error in nobs.default(x) : no'nobs' method is available,是因为MuMIn::model.sel需要通过nobs()函数获取每个模型的样本量,但从uGamm(lme4=TRUE)输出中提取的gam对象,没有对应的nobs方法实现;而mer对象本身带有nobs方法,所以用它能正常运行。

解决方案

方案1:为gam对象添加nobs方法

在调用model.sel之前,定义针对该类gam对象的nobs方法,让MuMIn能正确识别样本量:

# 定义gamm4 gam对象的nobs方法
nobs.gam <- function(object, ...) {
  length(object$y)
}

# 继续你的原有代码
gamm_list <- list()
for (i in 1:length(mod_names)){
  mod <- readRDS(mod_names[[i]])
  gamm_list[[i]] <- mod$gam
}

model.sel <- model.sel(gamm_list)

注:object$y是gamm4 gam对象中存储响应变量的字段,其长度即为样本量,该方法能准确返回所需值。

方案2:基于mer对象做模型选择,再匹配到gam对象预测

由于uGamm返回的mer和gam是同一模型的不同表现形式,模型选择的结果(AIC、排名等)完全一致。你可以先通过mer对象完成模型筛选,再提取对应模型的gam对象做预测:

# 加载mer对象列表并做模型选择
mer_list <- list()
for (i in 1:length(mod_names)){
  mod <- readRDS(mod_names[[i]])
  mer_list[[i]] <- mod$mer
}
model.sel_mer <- model.sel(mer_list)

# 获取最优模型的索引(以AIC最低的模型为例)
best_idx <- which.min(model.sel_mer$AIC)

# 提取对应模型的gam对象并生成预测
best_mod_gam <- readRDS(mod_names[[best_idx]])$gam
predictions <- predict(best_mod_gam, newdata = your_new_data)

这个方法无需修改函数方法,利用已兼容的mer对象完成选择,同时保留gam对象在平滑项预测上的优势。

注意事项

  • 确保所有参与选择的模型使用相同的响应变量和样本量,否则model.sel会出现逻辑错误。
  • 若使用方案1,后续若更新gamm4或MuMIn包,需确认该方法是否仍适用。

内容的提问来源于stack exchange,提问作者megsruppUNBC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:45:22