您显示的两个lsmeans语句都会生成s列表,lsmobj并且这些列表的每个元素都是单独处理的。如果您想对两个或多个组合的列表进行整体调整,这是技术性的,需要一些工作。
首先,保存列表:
lsmlist = lsmeans(warp.lm, list(pairwise ~ wool|tension,
pairwise ~ tension|wool))
这将创建一个 4 lsmobjs 的列表(最初是两个两个列表)
> names(lsmlist)
[1] "lsmeans of wool | tension"
[2] "pairwise differences of contrast, tension | tension"
[3] "lsmeans of tension | wool"
[4] "pairwise differences of contrast, wool | wool"
用户希望将 3 个比较lsmlist[[2]]与 6 个相结合,lsmlist[[4]]并对这 9 个比较进行总体多重性调整。
首先,lsmobj从其中一个结果创建一个新的,然后修复它。
mydiffs = lsmlist[[4]]
首先,将两组比较的线性函数绑定在一起:
mydiffs@linfct = rbind(lsmlist[[2]]@linfct, lsmlist[[4]]@linfct)
我们还需要定义grid槽,它定义了与每个线性函数相关的因素。为简单起见,我只contrast为 9 个对比定义了一个以 9 个级别命名的因子(这里可以做一些更有趣的事情)。
mydiffs@grid = data.frame(contrast = 1:9)
最后,修复记账的辅助信息。我们现在使用我们的新contrast因子作为唯一的变量,没有“by”变量。对于 9 个对比的组合系列,Tukey 调整没有意义,因此我们使用多元 ( ) 方法:t"mvt"
mydiffs = update(mydiffs, pri.vars = "contrast", by.vars = NULL,
adjust="mvt")
现在,我们可以查看生成的摘要:
> mydiffs
contrast estimate SE df t.ratio p.value
1 16.3333333 5.157299 48 3.167 0.0205
2 -4.7777778 5.157299 48 -0.926 0.9119
3 5.7777778 5.157299 48 1.120 0.8258
4 20.5555556 5.157299 48 3.986 0.0019
5 20.0000000 5.157299 48 3.878 0.0026
6 -0.5555556 5.157299 48 -0.108 1.0000
7 -0.5555556 5.157299 48 -0.108 1.0000
8 9.4444444 5.157299 48 1.831 0.3796
9 10.0000000 5.157299 48 1.939 0.3190
P value adjustment: mvt method for 9 tests
我可以考虑添加一个组合lsm.list对象的功能,但这并不简单——主要是因为在为结果(grid部分)获取有意义的标签方面很复杂。不同的用户期望不同的默认值也是一个问题。