如何在 R 中的 emmeans() 命令中评估字符串变量作为因子?

Posted

技术标签:

【中文标题】如何在 R 中的 emmeans() 命令中评估字符串变量作为因子?【英文标题】:How to evaluate a string variable as factor in the emmeans() command in R? 【发布时间】:2021-09-11 14:43:02 【问题描述】:

我想将具有自定义因子的变量从 ANOVA 模型分配给 emmeans() 语句。在这里,我使用 R 中的 oranges 数据集来使代码可重现。这是我的模型以及我通常如何计算因子存储的 emmmeans:

library(emmeans) 
oranges$store<-as.factor(oranges$store)
model <- lm (sales1 ~ 1 + price1 + store ,data=oranges)
means<-emmeans(model, pairwise  ~ store, adjust="tukey")

现在我想分配一个变量 (lsmeanfact),定义计算 lsmeans 的因素。

lsmeanfact<-"store"

但是,当我想在 emmeans() 函数中评估这个变量时,它返回错误,它基本上没有找到变量 lsmeanfact,所以它不会评估这个变量。

means<-emmeans(model, pairwise  ~ eval(parse(lsmeanfact)), adjust="tukey")
Error in emmeans(model, pairwise ~ eval(parse(lsmeanfact)), adjust = "tukey") : 
  No variable named lsmeanfact in the reference grid

我应该如何更改我的代码才能评估变量 lsmeanfact 以便正确计算“plantcode”的 lsmeans?

【问题讨论】:

您应该包含一个data 的示例以使问题可重现 谢谢,我刚刚做到了 :-) 你不能只做emmeans(model, lsmeanfact)吗?第二个参数可以是字符值。您可以在结果上使用pairs() 进行成对部分 【参考方案1】:

你可以使用reformulate函数。

library(emmeans)
lsmeanfact<-"store"

means <- emmeans(model, reformulate(lsmeanfact, 'pairwise'), adjust="tukey")

或者用formula/as.formula构造一个公式。

means <- emmeans(model, formula(paste('pairwise', lsmeanfact, sep = '~')), adjust="tukey")

这里reformulate(lsmeanfact, 'pairwise')formula(paste('pairwise', lsmeanfact, sep = '~')) 都返回pairwise ~ store

【讨论】:

【参考方案2】:

您根本不需要做任何特别的事情。 emmeans()specs 参数可以是字符值。您可以在单独的调用中获得成对比较,这实际上是一种更好的方法。

library(emmeans)

model <- lm(sales1 ~ price1 + store, data = oranges)

lsmeanfact <- "store"

( EMM <- emmeans(model, lsmeanfact) )
##  store emmean   SE df lower.CL upper.CL
##  1       8.01 2.61 29     2.67     13.3
##  2       9.60 2.30 29     4.89     14.3
##  3       7.84 2.30 29     3.13     12.6
##  4      10.44 2.35 29     5.63     15.2
##  5      10.19 2.28 29     5.53     14.9
##  6      15.22 2.28 29    10.56     19.9
## 
## Confidence level used: 0.95

pairs(EMM)
##  contrast estimate   SE df t.ratio p.value
##  1 - 2      -1.595 3.60 29 -0.443  0.9976 
##  1 - 3       0.165 3.60 29  0.046  1.0000 
##  1 - 4      -2.428 3.72 29 -0.653  0.9856 
##  1 - 5      -2.185 3.50 29 -0.625  0.9882 
##  1 - 6      -7.209 3.45 29 -2.089  0.3206 
##  2 - 3       1.761 3.22 29  0.546  0.9936 
##  2 - 4      -0.833 3.23 29 -0.258  0.9998 
##  2 - 5      -0.590 3.23 29 -0.182  1.0000 
##  2 - 6      -5.614 3.24 29 -1.730  0.5239 
##  3 - 4      -2.593 3.23 29 -0.802  0.9648 
##  3 - 5      -2.350 3.23 29 -0.727  0.9769 
##  3 - 6      -7.375 3.24 29 -2.273  0.2373 
##  4 - 5       0.243 3.26 29  0.075  1.0000 
##  4 - 6      -4.781 3.28 29 -1.457  0.6930 
##  5 - 6      -5.024 3.23 29 -1.558  0.6314 
## 
## P value adjustment: tukey method for comparing a family of 6 estimates

由reprex package (v2.0.0) 于 2021 年 6 月 29 日创建

此外,无论如何,specs 需要的是所涉及因素的名称,而不是因素本身。另请注意,在拟合模型之前无需将store 转换为因子

【讨论】:

以上是关于如何在 R 中的 emmeans() 命令中评估字符串变量作为因子?的主要内容,如果未能解决你的问题,请参考以下文章

为 R 中的许多列运行具有 emmeans 和对比的 LM

无法通过 R 中的 emmeans 对比截距

R中使用emmeans和geepack的每组边际均值和置信水平

r包emmeans中的weights="cell"和weights="proportional"有啥区别

Emmeans 包:str2lang(x) 中的错误:<文本>:1:21:意外符号 [关闭]

将 `emmeans::joint_tests()` 输出中的 p 值格式保留在针织 pdf 中