在emmeans调用中使用变量名替代预测因子名的问题
问题:emmeans的at参数中能否用变量替代预测因子名?
假设已定义变量var,其值为模型中的预测因子名"disp",代码如下:
library(emmeans) var <- "disp" lm.mod <- lm(mpg ~ disp + hp, data=mtcars)
尝试在emmeans的at参数中使用变量var时,该参数被忽略:
emmeans(lm.mod, var, at=list(var=c(100,200,300,400)))
得到的结果未按指定值计算;而直接使用disp时,能得到预期输出:
emmeans(lm.mod, var, at=list(disp=c(100,200,300,400)))
请问能否在emmeans的at参数中用变量替代实际预测因子名?
解决方案
可以实现,问题核心是直接使用list(var=...)时,列表的名称是字符串"var",而非变量var存储的"disp"。需要动态给列表命名,以下是两种常用方法:
方法1:使用setNames函数
通过setNames将向量的名称设置为变量var的值,再传入at参数:
emmeans(lm.mod, var, at=setNames(list(c(100,200,300,400)), var))
方法2:先构建动态命名的列表
先创建空列表,再通过下标赋值的方式用变量指定列表名:
at_list <- list() at_list[[var]] <- c(100,200,300,400) emmeans(lm.mod, var, at=at_list)
两种方法都能让at参数正确识别目标预测因子disp,按指定值计算边际均值。
内容的提问来源于stack exchange,提问作者locus
相关产品推荐
相关产品推荐

