连续和分类预测变量之间交互的混合模型多重比较

机器算法验证 r 混合模式 多重比较
2022-03-21 09:00:03

我想lme4用来拟合混合效应回归并multcomp计算成对比较。我有一个包含多个连续和分类预测变量的复杂数据集,但我的问题可以使用内置ChickWeight数据集作为示例来演示:

m <- lmer(weight ~ Time * Diet + (1 | Chick), data=ChickWeight, REML=F)

Time是连续的并且Diet是分类的(4 个级别)并且每个饮食有多个小鸡。所有小鸡开始时的体重大致相同,但它们的饮食(可能)会影响它们的生长速度,因此Diet截距应该(或多或少)相同,但斜率可能不同。我可以得到这样的截距效果的成对比较Diet

summary(glht(m, linfct=mcp(Diet = "Tukey")))

而且,确实,它们并没有显着不同,但是我怎样才能对Time:Diet效果进行类似的测试呢?只是将交互项放入mcp会产生错误:

summary(glht(m, linfct=mcp('Time:Diet' = "Tukey")))
Error in summary(glht(m, linfct = mcp(`Time:Diet` = "Tukey"))) : 
  error in evaluating the argument 'object' in selecting a method for function
 'summary': Error in mcp2matrix(model, linfct = linfct) : 
Variable(s) ‘Time:Diet’ have been specified in ‘linfct’ but cannot be found in ‘model’! 
1个回答

默认情况下,lmer将分类预测变量的参考水平视为基线并估计其他水平的参数。因此,您在默认输出中获得了一些成对比较,您可以通过relevel定义新的参考水平并重新拟合模型来获得其他比较。这样做的好处是可以让您使用模型比较或 MCMC 来获取 p 值,但不能对多重比较进行校正(尽管您可以在之后应用自己的校正)。

要使用multcomp,您需要定义对比矩阵。对比矩阵中的每一行代表您在默认模型输出中获得的效果的权重,从 Intercept 开始。因此,如果您想要一个已经包含在基本输出中的效果,您只需在与该效果对应的位置添加一个“1”即可。由于参数估计值是相对于一个共同的参考水平,您可以通过将一个的权重设置为“-1”和另一个“1”来比较任何两个其他水平。以下是示例中的Time:Diet术语的工作方式ChickWeight

contrast.matrix <- rbind("Time:Diet1 vs. Time:Diet2" =  c(0, 0, 0, 0, 0, 1, 0, 0),
                           "Time:Diet1 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, 0, 1, 0),
                           "Time:Diet1 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, 0, 1),
                           "Time:Diet2 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, -1, 1, 0),
                           "Time:Diet2 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, -1, 0, 1),
                           "Time:Diet3 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, -1, 1))
summary(glht(m, contrast.matrix))

警告购买者:这种方法似乎使用正态近似来获得 p 值,这有点反保守,然后对多重比较进行一些校正。结果是,此方法使您可以轻松访问任意数量的成对参数估计和标准误差,但 p 值可能是也可能不是您想要的。

(感谢r-ling-lang-L的 Scott Jackson提供帮助)