R与SPSS混合模型重复测量代码[来自Cross Validated]

时间:2017-12-08 21:55:35

标签: r spss anova mixed-models longitudinal

注意:此问题最初发布在Cross Validated上,建议在StackOverflow中询问。

我正在尝试模拟3路重复测量实验,FixedFactorA * FixedFactorB *时间[天]。没有遗漏的观察结果,但我的团队(FactorA * FactorB)是不相等的(接近但不完全平衡)。通过在线阅读,对观察顺序重要的重复测量实验进行建模的最佳方法(由于响应均值和方差随时间变化而变化)和不等组,是使用混合模型并指定适当的协方差结构。 但是,我对混合模型的想法不熟悉,我很困惑我是否使用正确的语法来模拟我想要建模的内容。

我想做一个完整的因子分析,这样我才能发现重要的时间*因素相互作用。例如,对于因子A = 1的受试者,他们随时间的反应可能具有与因子A = 2的受试者不同的斜率和/或截距。我还希望能够检查因子A和因子B的某些组合是否随时间具有显着不同的响应(因此是完整的三向交互项)。

通过在线阅读,似乎AR1是类似纵向数据的合理协方差结构,所以我决定尝试一下。另外,我看到一个人应该使用ML,如果有人计划比较两个不同的模型,所以我选择了这种方法,以期需要微调模型。我的理解是,目标是在模型选择期间最小化AIC。

这是我在SPSS中尝试的代码(对于长格式数据),它产生了2471的AIC:

MIXED RESPONSE BY FactorA FactorB Day
  /CRITERIA=CIN(95) MXITER(100) MXSTEP(10) SCORING(1) SINGULAR(0.000000000001) HCONVERGE(0,
ABSOLUTE) LCONVERGE(0, ABSOLUTE) PCONVERGE(0.000001, ABSOLUTE)
  /FIXED=FactorA FactorB Day FactorA*FactorB FactorA*Day FactorB*Day FactorA*FactorB*Day | SSTYPE(3)
  /METHOD=ML
  /PRINT=SOLUTION TESTCOV
  /REPEATED=Day | SUBJECT(Subject_ID) COVTYPE(AR1)

这是我在R中尝试的,它产生了2156的AIC:

    require(nlme)

    #output error fix: https://stats.stackexchange.com/questions/40647/lme-error-iteration-limit-reached 

    ctrl <- lmeControl(opt='optim')  #I used this b/c otherwise I get the iteration limit reached error

    fit1 <- lme(RESPONSE ~ Day*FactorA*FactorB, random = ~ Day|Subject_ID, control=ctrl,
        correlation=corAR1(form=~Day), data, method="ML")

    summary(fit1)

这是我的问题:

  1. 上面的SPSS代码产生了AIC = 2471的模型,而R代码产生了AIC = 2156的模型。使模型不同的代码是什么?

  2. 根据我上面所描述的,这些模型中的任何一个都适合我要测试的内容吗?如果没有,那么什么是更好的方法,我将如何在两个程序中实现以获得相同的结果?

  3. 编辑

    另外需要注意的是,我没有对我的因素进行虚拟编码。我不知道这两个软件是否存在问题,或者SPSS与R中的内置编码是否不同。我也不知道这对于我的三向交互术语是否会有问题。

    另外,当我说“因素”时,我指的是一个不变的群体或特征(如“性”)。

1 个答案:

答案 0 :(得分:0)

从无条件模型开始,一个在第一级具有身份方差 - 协方差结构,在第一级具有AR(1)var-covar结构:

unconditional.identity<-lme(RESPONSE~Day, random=~Day|Subject_ID, data=data, method='ML')
unconditional.ar1<-lme(RESPONSE~Day, random=~Day|Subject_ID, correlation=corAR1(form=~Day), data=data, method='ML')

找出此无条件模型的类内相关系数,即2级误差除以1级和2级误差之和。这在电子表格程序中可能更容易,但在R:

intervals(unconditional.identity)$reStruct$Subject_ID[2]^2/(intervals(unconditional.identity)$reStruct$Subject_ID[2]^2+intervals(unconditional.identity)$sigma[2]^2)

intervals(unconditional.ar1)$reStruct$Subject_ID[2]^2/(intervals(unconditional.ar1)$reStruct$Subject_ID[2]^2+intervals(unconditional.ar1)$sigma[2]^2)

这取决于您的领域,但在教育研究中,ICC低于0.2,绝对低于0.1,被认为不适用于分层线性模型。也就是说,多重回归会更好,因为确认了独立性。如果您的ICC低于您所在领域的截止值,则不要使用分层纵向模型。

如果ICC对于分层线性模型是可接受的,则在控制分组变量中添加标识和AR(1)var-covar矩阵:

conditional1.identity<-lme(RESPONSE~Day+Group, random=~Day+Group|Subject_ID, data=data, method='ML')
conditional1.ar1<-lme(RESPONSE~Day+Group, random=~Day+Group|Subject_ID, correlation=corAR1(form=~Day), data=data, method='ML')

如果你的因素是时间不变的(你在Cross Validated上说过),那么你的模型会变大,因为时间和组嵌套在这些固定的效果中:

conditional2.identity<-lme(RESPONSE~Day+Group+FactorA+FactorB+FactorA*Day+FactorB*Day+FactorA*Group+FactorB*Group+FactorB, random=~Day+Group|Subject_ID, data=data, method='ML')
conditional2.ar1<-lme(Day+Group+FactorA+FactorB+FactorA*Day+FactorB*Day+FactorA*Group+FactorB*Group+FactorB, random=~Day+Group|Subject_ID, correlation=corAR1(form=~Day), data=data, method='ML')

您可以使用intervals()或p值与summary()获得系数的置信区间。请注意,lme以标准差格式报告错误字词。

我不知道你的学习领域,所以我不能说你的三向互动效果是否具有理论意义。但是你的模型在这一点上变得非常密集。您估计的参数越多,模型在比较时的自由度就越大,因此统计显着性会有偏差。如果你真的对三向交互效应感兴趣,我建议你考虑这种交互的理论意义以及如果发生这种交互会意味着什么。尽管如此,您可以通过将其添加到上面的代码来估计它:

conditional3.identity<-lme(RESPONSE~Day+Group+FactorA+FactorB+FactorA*Day+FactorB*Day+FactorA*Group+FactorB*Group+FactorB+Day*FactorA*FactorB, random=~Day+Group|Subject_ID, data=data, method='ML')
conditional3.ar1<-lme(Day+Group+FactorA+FactorB+FactorA*Day+FactorB*Day+FactorA*Group+FactorB*Group+FactorB+Day*FactorA*FactorB, random=~Day+Group|Subject_ID, correlation=corAR1(form=~Day), data=data, method='ML')

最后,比较嵌套模型:

anova(unconditional.identity,conditional1.identity,conditional2.identity,conditional3.identity)

anova(unconditional.ar1,conditional1.ar1,conditional2.ar1,conditional3.ar1)

就像我说的,你估计的参数越多,你的统计显着性就越偏向:即,更多的参数=更多的自由度=更少的统计模型的机会。

HOWEVER ,多级模型的最佳部分是比较效果大小,因此您根本不必担心p值。效果大小的形式为&#34;比例减少的方差解释。&#34;

这是比较模型。例如,要将第1级中解释的方差比例减少从无条件模型转换为条件1模型:

(intervals(unconditional.identity)$sigma[2]^2 - intervals(conditional1.identity)$sigma[2]^2) / intervals(unconditional.identity)$sigma[2]^2

希望你能够即插即用#34;您拥有的二级错误术语的数量相同(在某些情况下,这个错误超过一个)。确保以这种方式仅比较嵌套模型。