lsmeans (R):使用交互项调整多重比较

机器算法验证 r 相互作用 事后 lsmeans
2022-04-01 01:37:39

我在 R 中有一个 lsmeans 问题。我想对交互进行事后分析,类似于 lsmeans 文档中提供的示例。

我对 p 值是否相同这一事实感到困惑

warp.lm <- lm(breaks ~ wool * tension, data = warpbreaks)

(一个):

lsmeans(warp.lm, list(pairwise ~ wool|tension, pairwise ~ tension|wool))

或 (B):

lsmeans(warp.lm, list(pairwise ~ wool|tension))

在 (A) 的情况下 p 值是否应该不高于 (B)?(A) 进行 9 次事后比较,(B) 仅 3 次。

我可以确定 (A) 已针对所有 9 个比较进行了调整吗?

谢谢!

2个回答

在即将发布的lsmeans版本中提供

lsmeans的下一次更新(2.20 或更高版本)将包括rbind用于ref.gridlsmobj对象的方法。它可以很容易地将两个或矿石对象组合成一个族,并且默认为"mvt"调整方法。这是当前示例:

> w.t <- pairs(lsmeans(warp.lm, ~ wool | tension))
> t.w <- pairs(lsmeans(warp.lm, ~ tension | wool))

> rbind(w.t, t.w)
 tension wool contrast   estimate       SE df t.ratio p.value
 L       .    A - B    16.3333333 5.157299 48   3.167  0.0203
 M       .    A - B    -4.7777778 5.157299 48  -0.926  0.9119
 H       .    A - B     5.7777778 5.157299 48   1.120  0.8258
 .       A    L - M    20.5555556 5.157299 48   3.986  0.0018
 .       A    L - H    20.0000000 5.157299 48   3.878  0.0027
 .       A    M - H    -0.5555556 5.157299 48  -0.108  1.0000
 .       B    L - M    -0.5555556 5.157299 48  -0.108  1.0000
 .       B    L - H     9.4444444 5.157299 48   1.831  0.3793
 .       B    M - H    10.0000000 5.157299 48   1.939  0.3191

P value adjustment: mvt method for 9 tests 

如果您确实指定 Tukey 而不是 mvt,它会非常接近相同的结果:

> test(rbind(w.t, t.w), adjust = "tukey")
 tension wool contrast   estimate       SE df t.ratio p.value
 L       .    A - B    16.3333333 5.157299 48   3.167  0.0196
 M       .    A - B    -4.7777778 5.157299 48  -0.926  0.8683
 H       .    A - B     5.7777778 5.157299 48   1.120  0.7727
 .       A    L - M    20.5555556 5.157299 48   3.986  0.0018
 .       A    L - H    20.0000000 5.157299 48   3.878  0.0026
 .       A    M - H    -0.5555556 5.157299 48  -0.108  0.9999
 .       B    L - M    -0.5555556 5.157299 48  -0.108  0.9999
 .       B    L - H     9.4444444 5.157299 48   1.831  0.3467
 .       B    M - H    10.0000000 5.157299 48   1.939  0.2922

P value adjustment: tukey method for comparing a family of 4.772 estimates

奇怪的小数家庭规模来自(4.7722)=9

您显示的两个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部分)获取有意义的标签方面很复杂。不同的用户期望不同的默认值也是一个问题。