混合效果模型上的多重比较


31

我正在尝试使用混合效果模型分析一些数据。我收集的数据代表了一些不同基因型的年轻动物随时间的体重。

我正在使用此处提出的方法:https : //gribblelab.wordpress.com/2009/03/09/repeated-measures-anova-using-r/

特别是我正在使用解决方案2

所以我有类似

require(nlme)
model <- lme(weight ~ time * Genotype, random = ~1|Animal/time, 
         data=weights)    
av <- anova(model)

现在,我想进行一些比较。使用multcomp我可以做到:

require(multcomp)
comp.geno <- glht(model, linfct=mcp(Genotype="Tukey"))
print(summary(comp.geno))

而且,当然,我可以随着时间做同样的事情。

我有两个问题:

  1. 如何mcp查看时间与基因型之间的相互作用?
  2. 我跑步时glht收到以下警告:

    covariate interactions found -- default contrast might be inappropriate

    这是什么意思?我可以放心地忽略它吗?还是应该避免这种情况?

编辑: 我发现此PDF指出:

由于在这种情况下不可能自动确定感兴趣的参数,因此默认情况下,multcomp中的mcp()将仅针对主要效果生成比较,而忽略协变量和交互作用。从版本1.1-2开始,可以指定对交互项进行平均,并分别使用参数interact_average = TRUE和covariate_average = TRUE进行协变量,而早于1.0-0的版本将对交互项进行自动平均。但是,我们建议用户手动编写所需的对比集。每当对默认的对比度量有疑问时,都应该这样做,这通常发生在具有更高阶交互项的模型中。关于这个问题的进一步讨论和例子,我们参考许(1996),第7章,和塞尔(1971),第7.3章。

我没有那些书,但是也许有人在吗?


看看InvivoStat(invivostat.co.uk),它应该执行您正在寻找的分析类型

Answers:


29

如果timeGenotype都是表面上的分类预测变量,并且您有兴趣将所有时间/基因型对彼此进行比较,那么您可以创建一个交互变量,并在其上使用Tukey对比:

weights$TimeGeno <- interaction(weigths$Time, weights$Geno)
model <- lme(weight ~ TimeGeno, random = ~1|Animal/time, data=weights) 
comp.timegeno <- glht(model, linfct=mcp(TimeGeno="Tukey")) 

如果您对其他对比感兴趣,则可以使用以下事实:自linfct变量可以为对比使用系数矩阵-这样,您就可以准确地设置所需的比较。

编辑

注释中似乎有些担忧,认为装有TimeGeno预测器的模型与装有预测器的原始模型不同Time * Genotype情况并非如此,模型是等效的。唯一的区别在于固定效果的参数化,其设置是为了使其更易于使用glht

我使用了一个内置数据集(它具有Diet而不是Genotype)来证明这两种方法具有相同的可能性,预测值等:

> # extract a subset of a built-in dataset for the example
> data(BodyWeight)
> ex <- as.data.frame(subset(BodyWeight, Time %in% c(1, 22, 44)))
> ex$Time <- factor(ex$Time)
> 
> #create interaction variable
> ex$TimeDiet <- interaction(ex$Time, ex$Diet)
    > 
    > model1 <- lme(weight ~ Time * Diet, random = ~1|Rat/Time,  data=ex)    
    > model2 <- lme(weight ~ TimeDiet, random = ~1|Rat/Time, data=ex)    
    > 
    > # the degrees of freedom, AIC, BIC, log-likelihood are all the same 
    > anova(model1, model2)
           Model df      AIC      BIC    logLik
    model1     1 12 367.4266 387.3893 -171.7133
    model2     2 12 367.4266 387.3893 -171.7133
    Warning message:
    In anova.lme(model1, model2) :
      fitted objects with different fixed effects. REML comparisons are not meaningful.
    > 
    > # the second model collapses the main and interaction effects of the first model
    > anova(model1)
                numDF denDF   F-value p-value
    (Intercept)     1    26 1719.5059  <.0001
    Time            2    26   28.9986  <.0001
    Diet            2    13   85.3659  <.0001
    Time:Diet       4    26    1.7610  0.1671
    > anova(model2)
                numDF denDF   F-value p-value
    (Intercept)     1    24 1719.5059  <.0001
    TimeDiet        8    24   29.4716  <.0001
    > 
    > # they give the same predicted values
    > newdata <- expand.grid(Time=levels(ex$Time), Diet=levels(ex$Diet))
    > newdata$TimeDiet <- interaction(newdata$Time, newdata$Diet)
> newdata$pred1 <- predict(model1, newdata=newdata, level=0)
    > newdata$pred2 <- predict(model2, newdata=newdata, level=0)
> newdata
  Time Diet TimeDiet   pred1   pred2
1    1    1      1.1 250.625 250.625
2   22    1     22.1 261.875 261.875
3   44    1     44.1 267.250 267.250
4    1    2      1.2 453.750 453.750
5   22    2     22.2 475.000 475.000
6   44    2     44.2 488.750 488.750
7    1    3      1.3 508.750 508.750
8   22    3     22.3 518.250 518.250
9   44    3     44.3 530.000 530.000

唯一的区别是哪些假设易于检验。例如,在第一个模型中,很容易测试两个预测变量是否相互作用,在第二个模型中,对此没有显式测试。另一方面,在第二个模型中很容易测试这两个预测变量的联合效应,而第一个模型则不容易。其他假设是可以检验的,建立这些假设只是更多的工作。


3
glht使用lme模型中给定的自由度。我不确定这些自由度是否合适...?
斯特凡洛朗

2
我也很好奇如何做到最好。但是,这种方法会产生不同模型的效果-实际上只是测试一种交互作用的模型。第二个模型根本不包括两个潜在的主要影响。这似乎不是检查第一个模型中效果的适当方法。
Marcus Morrisey 2014年

@Aniko,我曾想过像您刚才那样将2个类别变量组合为一个,但是我犹豫了,因为只有其中一个变量在主体内,另一个在两者之间。您可以确认这不算什么吗?我注意到在示例中保留的Animal/time内容现在不是因素之一。我真的understand这样吗?
toto_tico 2015年

@toto_tico,我已经编辑了响应以显示第二个模型与第一个模型等效。
Aniko

3
@toto_tico,我给了你一个可复制的例子。您为什么不先尝试all.equal(resid(model1), resid(model2))看看它们是否相同,然后再猜测呢?只有固定效果参数化是不同的。TimeDiet不是纯粹的互动术语,它不等于Time:Diet,而是Time + Diet + Time:Diet
Aniko
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.