在 JMP ®软件中分析重复测量数据
通常在实验中,对同一受试者或实验单元进行多次测量。这意味着可能需要对数据进行重复测量分析,以做出有效推断并得出有意义的结论。
JMP 提供了多种方法来分析重复测量:多变量重复测量方法、单变量裂区方法,以及通过 JMP ® Pro 的附加功能,使用拟合模型平台中的混合模型特性执行此类分析。以下讨论将比较这些分析类型。该示例使用 DOGS (dogs.jmp) 样本数据表,这是重复测量研究的结果。在此示例中,在对 DOGS 数据集进行分析之前,我们将 ID 变量重命名为主题,并将建模类型从连续更改为名义。
图 A 显示了从 DOGS 表中选定的列。该数据表包含有关 16 只狗的信息,这些狗被分配到由独立变量drug定义的治疗组,其值为“吗啡”和“三甲胺”。在注射药物之前以及注射后一分钟和三分钟记录组胺的血液浓度。对每个值取对数(一种常见的转换,可使响应变量更线性),从而得到三个变量,即LogHist0 、 LogHist1和LogHist3 。此外,还有一个额外的Subject列,如上所述声明为 Nominal,将用于解释重复测量数据的单变量分析中的受试者内变异性。
图 A:数据表的排列,多元方法

图 B 显示了重组 DOGS 表中选定的列,其中LogHist列已堆叠为单个响应列。
图 B :数据表的排列、单变量裂区方法和混合模型方法

多变量方法
具有多个响应列的原始 DOGS 表具有测试相同效应的多元方差分析 (MANOVA) 所需的形式 - 无需进行任何更改。
激活此数据表后,再次从分析菜单中选择“拟合模型”。
指定LogHist0 、 LogHist1和LogHist3作为 Y 变量。将拟合特质更改为 Manova。指定药物作为模型效应并运行模型。
当有多个 Y 变量时,JMP 会自动执行多变量分析。首次运行模型时,会出现多变量控制面板。要测试药物随时间的变化效果,请从控制面板上的弹出菜单中选择“重复测量”作为响应设计。在出现的重复测量对话框中,使用默认效果名称时间,但选中“单变量检验”以获得单变量和调整后的单变量检验。此选项包括球形度检验(此处未显示),用于检查未调整的单变量 F 检验是否合适。如果球形度卡方检验不显著,则可以使用未调整的单变量 F 检验。但是,如果球形度检验卡方显著,则拒绝该标准,应使用多变量 F 检验或调整后的单变量 F 检验。JMP 提供 Greenhouse-Geisser (GG) 和 Huynh-Feldt (HF) 调整后的 F 检验。
单变量裂区方法
单变量模型只有一个响应。要将数据作为单变量方差分析 (ANOVA) 进行分析,您必须将每个变异源(受试者间和受试者内)作为效应纳入模型中。
单变量分析要求响应测量值位于一列中。使用 Tables 菜单中的 Stack 命令,您可以堆叠LogHist0 、 LogHist1和LogHist3列以创建新的响应列,如图 B 所示。新的响应LogHist和新的分类变量Time是由 Stack 命令创建的。
正确设置数据表后,从分析菜单中选择拟合模型。选择LogHist作为 Y,并在模型中添加效应,如图 C 所示。
图 C:单变量重复测量规范

要创建上面显示的模型,该模型具有用于测试模型中的受试者间效应的随机效应,请单击以下变量和按钮:
- 变量选择列表中的药物,然后添加
- 在变量选择列表中选择主题,然后添加
- 变量选择列表中的药物,以及
- 在“模型效果”列表中选择“主题” ,然后“嵌套”
- 在“模型中的效应”列表中选择“受试者 [药物]” ,然后从“效应属性”弹出菜单中选择“随机” ,在“模型中的效应”列表中选择“受试者 [药物]&随机”
- 在变量选择列表中,添加
- 变量选择列表中的药物和
- 在变量选择列表中选择时间,然后交叉
受试者间效应(药物)是裂区设计的整区效应。受试者效应嵌套在药物中。该术语被指定为随机效应。模型中包含的随机效应表示数据中存在多种变异来源。REML 模型考虑了所有变异来源;因此,效应估计和效应测试会进行适当调整和计算。
运行此模型后,您可以检查结果窗口的“固定效应测试”部分中看到的模型效应的重要性,这些效应显示在下面的比较结果部分中。
混合模型方法
在 JMP Pro 中,拟合模型平台中的混合模型功能还提供了分析重复测量数据的功能。此方法要求将响应测量结果构建在单个列中,如图 B 所示。
混合模型特征适合各种协方差结构。这与多元方差分析(假设非结构化协方差矩阵,其中所有方差和协方差都是单独估计的)和单变量裂区方差分析(假设所有误差都是独立的)形成对比。当数据呈正态分布时,后者相当于在混合模型中假设复合对称协方差结构。
在数据表处于活动状态时,从分析菜单中选择拟合模型。从个性下拉菜单中,选择混合模型。将LogHist指定为 Y 变量,在固定效应选项卡中添加时间、药物和药物*时间,并将主体添加到随机效应选项卡。单击重复结构选项卡并保留默认选择“残差”,它代表复合对称协方差结构。在此示例中,我们将使用此选项显示跨方法的一致结果。如上一段所述,复合对称结构等同于单变量裂区分析中假定的协方差结构。
运行模型,固定效应的显著性将出现在结果窗口的最后一部分。
比较结果
多变量方法

单变量裂区方法

混合模型方法(仅限 JMP Pro)

方法比较
上图为分析结果对比。通过检查每组结果,您可以看到多变量和单变量效应检验之间的关系,包括混合模型分析。需要注意的要点是:
- 对于受试者间效应(药物),当没有缺失值时,多变量方法得出的结果与单变量方法相同。如果有缺失值,单变量分析将使用所有非缺失数据值,但多变量分析将排除任何有缺失值的受试者。
- 如果没有缺失值,单变量模型中的受试者内时间变量与具有“重复测量”响应设计的多变量模型中未调整的时间效应相同。但是,这些检验仅在满足球形度检验标准(前面提到)时才适用。否则,应使用多变量检验或调整后的单变量检验。
- 由于数据分布相当正态,因此在混合模型人格中使用复合对称协方差结构会产生与单变量裂区分析相同的结果。对于包含时间重复测量的数据,请注意替代协方差结构 AR(1) 通常是合适的,因为它允许相关观察但不会对模型进行过度拟合。
- 通常在重复测量研究中,最重要的影响是受试者内与受试者间的相互作用——感兴趣的假设是研究治疗是否随着时间的推移产生影响。在单变量分析中,药物*时间相互作用似乎不显著。
- 在这个例子中,更强大的多变量方法表明药物*时间相互作用效应具有边际显著性。
概括
总之,JMP 可以使用单变量裂区模型、多变量分析或使用 JMP Pro 的混合模型来分析重复测量数据。
每种类型的分析都有其优点和缺点:
- 在 JMP 中,多变量分析既简单又直观。其测试通常更强大。从计算的角度来看,这种方法最有效。但是,如果受试者缺少某个值,则该受试者的所有信息都会在分析中丢失。
- 单变量分析可以使用所有数据,只有受试者缺失的测量值才会被忽略。但是,单变量分析的计算量非常大,尤其是在受试者很多的情况下。
- 上述两种方法都假设协方差结构极端。多元分析假设协方差矩阵为非结构化矩阵,其中所有方差和协方差均单独估计。裂区分析假设所有误差都是独立的。根据这两个假设,数据中的信息用于估计协方差参数。这可能会导致模型过度拟合。混合模型的优势在于,它允许您选择不太极端的协方差结构,从而获得更强大的模型。在《JMP 拟合线性模型指南》中,混合模型章节的附加示例部分提供了有关模型过度拟合或欠拟合以及混合模型特性中各种协方差结构的使用的更多信息。
在对受试者内效应和涉及这些效应的相互作用进行单变量检验时,上述关于协方差矩阵的假设对于普通 F 检验提供的概率是正确的。如果不满足这些假设(如果球形度检验被拒绝),则应使用调整后的单变量 F 检验(在多变量报告中给出)或多变量 F 检验的概率。由于这些假设,只有当满足球形度条件时才应考虑单变量方法。有关此检验和本示例中讨论的其他想法的更多信息,请参阅 JMP《拟合线性模型》一书,可通过选择“帮助”►“书籍”►“拟合线性模型”(第 3 章:标准最小二乘报告和选项、第 7 章:混合模型和第 8 章:多元响应模型)找到该书
Cole 和 Grizzle, JE (1966),《十六只狗》,《生物统计学》,22:810
[先前的 JMP 说明 30584]
@AdamMorris哈哈,确实,这解决了问题。一定是分心了... 非常感谢。
嗨@arnaudsteyaert
我认为您的结果不同,因为示例仅使用了 3 个响应:LogHist0、LogHist1 和 LogHist3,但您的脚本还包括 LogHist5。希望这对您有所帮助!
亚当
你好,
非常感谢这篇非常有用的帖子。但是,当我尝试使用我的设置(JMP 17.1,MacOS)复制它时,我没有得到相同的结果。
对于 MANOVA 方法尤其如此,如下所示。

对于裂区试验和混合试验,结果更接近,但仍然不一样。


Dogs.jmp 表数据在最新版本中是否发生了变化?我是否没有正确指定模型?这是我运行的 MANOVA 的 JSL 脚本:
Fit Model(
Y( :LogHist0, :LogHist1, :LogHist3, :LogHist5 ),
Effects( :drug ),
Personality( "Manova" ),
Run(
Response Function(
"Sum",
Repeated( 1 ),
Title( "Between Subjects", "Somme" )
),
Response Function(
"Contrast",
Univariate Tests Also,
Repeated( 2 ),
Prefix( "Time*" ),
Title( "Within Subjects", "Contraste" )
)
),
SendToReport(
Dispatch( {"Within Subjects"}, "Sphericity Test", OutlineBox, {Close( 1 )} ),
Dispatch(
{"Within Subjects"},
"All Within Interactions",
OutlineBox,
{Close( 1 )}
)
)
)任何帮助都将不胜感激。