仅在对非显着交互进行平均时才使用 emmeans 提取主效应是不是可能/明智?
Posted
技术标签:
【中文标题】仅在对非显着交互进行平均时才使用 emmeans 提取主效应是不是可能/明智?【英文标题】:Is it possible/sensible to use emmeans to extract main effects only while averaging across non-significant interactions?仅在对非显着交互进行平均时才使用 emmeans 提取主效应是否可能/明智? 【发布时间】:2021-08-25 22:15:54 【问题描述】:我有一个包含一个因子和一个连续协变量的模型,ANOVA 表明因子和协变量的主效应均显着(P0.05)。该因子有两个水平。
为了报告结果,我使用 emmeans 为因子的两个水平提取了协变量范围内的模型估计值。由此我创建了一个图,显示因子的每个水平都有不同的斜率,而我在文中说明斜率的差异并不显着。这是一个简单的虚构示例:
x<-c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4)
y<-c(1,1.8,3,1.8,0.7,2,2.7,4,0.8,1.2,1.4,1.6,0.7,1.4,1.6,2.1)
f<-c("a","a","a","a","a","a","a","a","b","b","b","b","b","b","b","b")
df<-data.frame(x,f,y)
m<-lm(y~x*f)
anova(m)
plot.df<-data.frame(emmeans(m,~x*f,cov.reduce=F))
ggplot(plot.df,aes(x=x,y=emmean,colour=f,fill=f))+
geom_line()+
geom_ribbon(aes(ymin=lower.CL,ymax=upper.CL),colour=NA,alpha=0.2)
我的同事回过头来告诉我,当它们在 ANOVA 中不显着时,在图中看到不同的斜率令人困惑(在我们的真实数据中,斜率差异比我的小例子大)。我想,好吧,我必须能够在交互作用中平均主效应,即在每个因子水平的不同截距处绘制相同的斜率......但我不知道如何做到这一点......现在我想知道这是否不容易,因为这不是正确的做法。
所以我不知道是否需要:
帮助使用emmeans
(或类似函数)仅提取主效应?
关于仅提取主效应是否有意义的建议? (如果没有,该怎么办?)
我尝试了以下方法,但没有任何区别:
plot.df<-data.frame(emmeans(m,~x+f,cov.reduce=F))
更新:在与一位统计学家同事聊天后,我提出了一个关于如何使用 predict.lm()
执行此操作的类似问题,但未提及 emmeans 或统计有效性。事实证明,predict.lm()
是可能的(就其价值而言,我的统计同事认为这个概念没有问题):
How to edit interactions in model matrix used by predict.lm()?
【问题讨论】:
这个问题的某些部分对我来说似乎是统计数据。如果您询问它,例如交叉验证,意见会有所不同。 :) 我的 2 美分是大 p 值并不表示“没有相互作用”,所以如果你真的对科学的相互作用感兴趣,你应该把它留在里面并显示不同的斜率。如果科学上的“真实”模型是平行线,那么一个简单的方法就是去掉交互。您还可以通过emtrends()
获得“平均”斜率,例如:emtrends(m, ~1, var = "x")
。这加上每组的拦截将允许您画线(但没有 CI)。
谢谢@aosmith!我也倾向于展示不同的斜率或进行适当的模型选择程序来简化模型(并同意我应该在 CV 上发布更深入的内容) - 但首先要确保没有明显的 R 脚本解决方案,每个人思想完全没问题。 emtrends 函数可能很方便,干杯(我想估计 CI 可以通过从斜率的 CI 进行一些稍微繁琐的计算来获得......)
我确实认为在存在连续Xcategorical 交互的情况下计算主效应通常是有意义的,就像我们对categoricalXcategorical 所做的那样。我的印象是 SE 在数学上更难(但最近没有考虑过),我想知道基于 bootstrap 的 CI 是否足以显示拟合线周围的不确定性。
请注意我尝试使用来自emtrends(m, ~1, var = "x")
的斜率来查看是否可以画线,但无法弄清楚如何获得正确的截距......(但无论如何我现在认为首先简化模型是更好的方法)
【参考方案1】:
统计细节可能放在CrossValidated上更好,但如果只是主效应图,只需从模型中删除交互项m
:
library("ggplot2")
library("emmeans")
df <- data.frame(
x = c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
y = c(1, 1.8, 3, 1.8, 0.7, 2, 2.7, 4, 0.8, 1.2, 1.4, 1.6, 0.7, 1.4, 1.6, 2.1),
f = c("a", "a", "a", "a", "a", "a", "a", "a", "b", "b", "b", "b",
"b", "b", "b", "b")
)
m <- lm(y ~ x + f, data = df)
anova(m)
plot.df <- data.frame(emmeans(m, ~x + f, cov.reduce = FALSE))
ggplot(plot.df, aes(x = x, y = emmean, colour = f, fill = f)) +
geom_line() +
geom_ribbon(aes(ymin = lower.CL, ymax = upper.CL), colour = NA, alpha = 0.2)
【讨论】:
谢谢——这对于这个例子很实用 :-) 但是在更复杂的完整模型的情况下(我们的真实模型具有三向交互)我认为应该使用更正式的逐步选择方法获得简单的模型,而不是一次丢弃所有不重要的交互。但是,是的,这更像是一个简历主题! 我同意。答案只涉及没有交互的模型的可视化。它当然可以与模型选择方法相结合。根据我的经验,适当的可视化是理解分析功能的关键,尤其是在多重交互的情况下。以上是关于仅在对非显着交互进行平均时才使用 emmeans 提取主效应是不是可能/明智?的主要内容,如果未能解决你的问题,请参考以下文章