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

Posted

技术标签:

【中文标题】为 R 中的许多列运行具有 emmeans 和对比的 LM【英文标题】:Running an LM with emmeans and contrasts for many columns in R 【发布时间】:2021-07-10 20:05:32 【问题描述】:

我正在尝试比较使用特定对比的许多列的 LM 处理之间的均值。当我单独运行每一列时,它工作得很好,但我有超过 1000 列,单独设置它们是不可行的。我对 R 很陌生,还没有弄清楚如何使用循环,所以任何帮助都将不胜感激。

这就是我设置对比度的方式

df$GROUP <- factor(df$GROUP, levels = c("TRT1", "TRT2", "TRT3", "TRT4", "TRT5", "TRT6", "TRT7"))
Contrasts <- list(A = c(0, 1, 0, -1, 0, 0, 0),
                  B = c(-1, 2, 0, -1, 0, 0, 0),
                  C = c(0, 1, -1, 0, 0, 0, 0),
                  D = c(0, 0, 0, 1, 1, -1, -1),
                  E = c(0, 0, 0, 1, -1, -1, 1),
                  F = c(0, 0, 0, 1, -1, 1, -1))

This is an example of my data set

基本上我需要为每一列运行这段代码。

lm1 <- lm(CE(12:0) ~ GROUP, data = df)
lsmean <- emmeans(lm1, "GROUP")
contrast(lsmean, Contrasts, adjust = "none")

【问题讨论】:

这是一个类mlm。所以只需执行lm1&lt;-lm(as.matrix(df[-1])~GROUP, data = df) 这将为您运行所有回归 【参考方案1】:

他是一个类mlm。所以简单地做:

lm1<-lm(as.matrix(df[-1])~GROUP, data = df)

这将为您运行所有回归。

例如,使用iris 数据集:

lm(as.matrix(iris[-5])~Species, iris)

Call:
lm(formula = as.matrix(iris[-5]) ~ Species, data = iris)

Coefficients:
                   Sepal.Length  Sepal.Width  Petal.Length  Petal.Width
(Intercept)         5.006         3.428        1.462         0.246     
Speciesversicolor   0.930        -0.658        2.798         1.080     
Speciesvirginica    1.582        -0.454        4.090         1.780    

这类似于针对组运行 4 个不同的变量线性回归模型。

【讨论】:

这对于分析所有列非常有帮助。当我运行对比语句时,它会为我提供所有列的平均结果。有没有办法单独获取每列的对比列表? @Brandon 这意味着你必须做一个循环。以为你试图避免循环 如果循环可以正常工作。我只是不知道该怎么做。 你不需要循环。只需运行emm &lt;- emmeans(model, ~ GROUP | rep.meas); contrast(emm, Contrast, adjust = "none") 但是,这将产生一组 6000 个对比...如果您是 R 新手,也许最好从不那么令人生畏的期望开始。

以上是关于为 R 中的许多列运行具有 emmeans 和对比的 LM的主要内容,如果未能解决你的问题,请参考以下文章

从 R 中的 emmeans 中删除一个对比

用于计算 emmeans 对比度的自定义函数

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

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

在 emmeans 中定义对比

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