使用MuMIn包dredge处理GAM模型时遇na.omit报错求助
问题描述
使用MuMIn包的dredge函数筛选全局GAM模型时,持续触发如下报错:
Error in dredge(myglobalmod, evaluate = TRUE, trace = 2) :
'global.model' uses 'na.action' = "na.omit"
已尝试的操作包括:在gam()调用中显式设置na.action="na.omit"(或使用默认设置)、提前移除数据集中所有含NA的行,但均未解决问题。此前相同代码可正常运行,当前原因不明。
代码示例:
myglobalmod <- gam(response~ s(x1) + s(x2) + s(x3) + offset(x4), data=mydata, family="tw", na.action="na.omit") options(na.action=na.omit) mydredge <- dredge(myglobalmod, evaluate=TRUE, trace=2)
解决方法
MuMIn的dredge函数要求全局模型的na.action必须为na.fail,因为它需要确保所有候选模型使用完全一致的数据集,避免因不同模型自动过滤NA导致的样本量不一致问题。具体操作步骤如下:
- 手动清理数据集,彻底移除所有含缺失值的行:
mydata_clean <- na.omit(mydata)
- 使用清理后的数据集拟合全局GAM模型,强制设置
na.action = na.fail:
myglobalmod <- gam(response~ s(x1) + s(x2) + s(x3) + offset(x4), data=mydata_clean, family="tw", na.action=na.fail)
- 直接调用
dredge函数,无需额外设置全局na.action:
mydredge <- dredge(myglobalmod, evaluate=TRUE, trace=2)
补充说明:此前代码正常运行可能是因为当时数据集无缺失值,或MuMIn旧版本对na.action的检查规则更宽松,新版本强化了该校验逻辑。
内容的提问来源于stack exchange,提问作者leslie roberson
相关产品推荐
相关产品推荐

