使用此示例数据集
dat <- data.frame(sample=c(1,2,3,4,5,6, 7,8,9,10,11,12,13,14), treatment=c(1,2,3,4,5,6, 1,2,3,4,5,6,7,8), condition=factor(c("A","A","A","A","A","A", "B","B","B","B","B","B","B","B")), scores=c(2,4,3,5,6,13, 41,30,30,23,24,24,10,8))
mod <- lm(scores~treatment*condition, data=dat)我设置了自定义对比,以查看condition A跨treatment的线性增长和condition B跨treatment变量的线性下降:
con <- matrix(c(contr.poly(6)[,1],rep(0,8),rep(0,6),contr.poly(8)[,1]*-1), ncol=2)
con
[,1] [,2]
[1,] -0.5976143 0.00000000
[2,] -0.3585686 0.00000000
[3,] -0.1195229 0.00000000
[4,] 0.1195229 0.00000000
[5,] 0.3585686 0.00000000
[6,] 0.5976143 0.00000000
[7,] 0.0000000 0.54006172
[8,] 0.0000000 0.38575837
[9,] 0.0000000 0.23145502
[10,] 0.0000000 0.07715167
[11,] 0.0000000 -0.07715167
[12,] 0.0000000 -0.23145502
[13,] 0.0000000 -0.38575837
[14,] 0.0000000 -0.54006172是否可以与emmeans计算这些对比?
我知道我可以做emm <- emtrends(mod, ~ condition, var="treatment"),它符合线性函数,但是如果我想使用我的自定义对比,它们能被合并到emtrends中吗?
发布于 2022-07-20 00:35:48
你可以用
contrast(emm, con)这是因为emtrends()和emmeans()一样,返回emmGrid类的对象,这是contrast()可以使用的对象。
顺便说一句,多项式对比可以通过内置函数获得,所以它们不需要定制设置。你可以做这样的事
contrast(emm, "poly", max.degree = 3)增编
噢,我忽略了con是一个矩阵的事实。您需要首先将其重新创建为一个命名的list,每个元素都是所需的对比度系数。或以对比度系数作为列的data.frame。
发布于 2022-07-21 20:09:37
现在我正在尝试一个完全不同的答案,因为我从一些评论中知道了更多。
在OP中,我们有一个测试数据集dat,我们对下面的模型进行了拟合,并得到了估计的趋势。
mod <- lm(scores ~ treatment*condition, data = dat)
emt <- emtrends(mod, ~ condition, var = "treatment") # I renamed it以下是估计数,以及对这些估计数的直接比较:
> emt
condition treatment.trend SE df lower.CL upper.CL
A 1.80 0.805 10 0.00604 3.59
B -4.14 0.520 10 -5.30085 -2.98
Confidence level used: 0.95
> pairs(emt)
contrast estimate SE df t.ratio p.value
A - B 5.94 0.958 10 6.201 0.0001从评论中得出:
假设我希望得到条件A的线性增长和条件B的线性下降的估计(跨处理).
我相信上述趋势的比较正是这样做的。坡度差估计为5.94。顺便说一句,您可以不使用中的任何东西就可以得到这个估计值,这意味着包:
> summary(mod) $ coefficients
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.800000 3.1355565 -0.2551381 8.037871e-01
treatment 1.800000 0.8051366 2.2356456 4.936755e-02
conditionB 43.192857 4.0889261 10.5633745 9.597218e-07
treatment:conditionB -5.942857 0.9583042 -6.2014308 1.012643e-04请注意,treatment:condition的估计和测试完全相同。
但是继续这样的评论:
...具有相同对比度的系数: con <- list(c1=c(contr.poly(6),1,contr.poly(8),1*-1))
首先,这是手段的对比,而不是斜坡。第二,我肯定不认为这是你想要的,因为你要在一个等级上放1-6的坡度,把7-14的坡度放在另一个等级上。
如果您希望在一个对比和相同的范围内进行所有操作,请使用emmeans (而不是emtrends)在两个不同的治疗值(例如5和6)和两个条件下估计平均值,并构造适当的对比:
> EMM <- emmeans(mod, ~ treatment*condition, at = list(treatment = 5:6))
> contrast(EMM, list(con = c(c(-1, 1), -c(-1, 1))))
contrast estimate SE df t.ratio p.value
con 5.94 0.958 10 6.201 0.0001这是因为该模型适用于具有相同斜率的直线,而不管treatment的值如何,且斜率等于两种处理间隔的预测值的差异。
https://stackoverflow.com/questions/73043514
复制相似问题