如何评估字符串变量作为 R 中 emmeans() 命令的因素?
How to evaluate a string variable as factor in the emmeans() command in R?
我想将方差分析模型中带有自定义因子的变量分配给 emmeans() 语句。在这里,我使用 R 中的橘子数据集来使代码可重现。这是我的模型以及我通常如何计算因子存储的均值:
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()函数中对这个变量求值时returns报错,它基本上没有找到变量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?
您可以使用 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 = '~'))
returnpairwise ~ store
.
您根本不需要做任何特别的事情。 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-06-29 创建
此外,无论如何,specs
中需要的是所涉及因素的 名称,而不是因素本身。另请注意,在拟合模型之前不需要将 store
转换为因子
我想将方差分析模型中带有自定义因子的变量分配给 emmeans() 语句。在这里,我使用 R 中的橘子数据集来使代码可重现。这是我的模型以及我通常如何计算因子存储的均值:
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()函数中对这个变量求值时returns报错,它基本上没有找到变量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?
您可以使用 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 = '~'))
returnpairwise ~ store
.
您根本不需要做任何特别的事情。 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-06-29 创建此外,无论如何,specs
中需要的是所涉及因素的 名称,而不是因素本身。另请注意,在拟合模型之前不需要将 store
转换为因子