仅在对非显着交互进行平均时使用 emmeans 提取主要影响是否可能/明智?

问题描述

我有一个包含一个因子和一个连续协变量的模型,ANOVA 表明因子和协变量的主效应都显着(P0.05)。该因子有两个水平。

为了报告结果,我使用 emmeans 提取了协变量范围内两个因子水平的模型估计值。由此我创建了一个图,该图显示了因子的每个水平的不同斜率,而我在文本中指出这种斜率差异并不显着。这是一个简单的例子:

x<-c(1,2,3,4,1,4)
y<-c(1,1.8,0.7,2.7,0.8,1.2,1.4,1.6,2.1)
f<-c("a","a","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)

enter image description here

我的同事回我说,当它们在方差分析中不显着时,在图中看到不同的斜率会令人困惑(在我们的真实数据中,斜率差异比我的小例子大)。我想,好吧,我必须能够获得交互作用的平均主效应,即在每个因子水平的不同截距处绘制相同的斜率......但我不知道如何做到这一点......现在我想知道这是否并不容易,因为这不是正确的做法。

所以我不知道我是否需要:

  • 帮助使用 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()?

解决方法

CrossValidated 可能更好地放置统计细节,但如果它只是主效应图,只需从模型中删除交互项m

library("ggplot2")
library("emmeans")

df <- data.frame(
  x = c(1,2,3,4,1,4),y = c(1,1.8,0.7,2.7,0.8,1.2,1.4,1.6,2.1),f = c("a","a","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)