在R语言中使用glmulti时如何指定变量必纳入所有候选模型?
解决glmulti强制纳入变量时的公式弃用警告
问题原因
你自定义的glm.redefined函数中,always参数传入的是长度为2的字符向量c("+vb","+vv"),直接用paste(deparse(formula), always)会生成长度大于1的字符向量,而as.formula处理这类向量的方式已被弃用,因此触发警告。
修复方案
修改自定义函数,先将always中的多个强制纳入项合并为单个字符串,再与原公式拼接:
# 生成模拟数据 vy2 <- round(runif(100, 0,20)*round(runif(100))) va <- runif(100) vb <- runif(100) vv <- rep(c("A","B","C","D"), each=25) vv <- as.factor(vv) # 修复后的自定义glm函数 glm.redefined = function(formula, data, always="", ...) { # 合并always中的所有强制项为单个字符串 always_combined <- paste(always, collapse = " ") # 拼接完整公式并转换格式 full_formula <- as.formula(paste(deparse(formula), always_combined)) glm(full_formula, data=data, ...) } # 运行glmulti筛选模型 bab <- glmulti(vy2~va+va:vb+va:vv+vb:vv,level=2,fitfunc=glm.redefined,always=c("+vb","+vv"))
说明
- 修复核心是通过
paste(always, collapse = " ")把c("+vb","+vv")合并成"+vb +vv",确保传入as.formula的是单个字符串,符合当前R的语法规范。 - 运行修改后的代码,原有的弃用警告会消失,同时
vb和vv会被强制纳入所有候选模型,满足你的筛选需求。
内容的提问来源于stack exchange,提问作者Lara
相关产品推荐
相关产品推荐

