使用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
相关产品推荐
相关产品推荐

