各有千秋!利用三种主流统计软件建立线性混合效应模型

文摘   2024-05-19 21:02   湖南  
由于微信推送机制的变化,建议大家将公众号标记为星标,如此才能及时收到我们的更新,同时也希望大家能帮忙点点赞和转发,你们的支持是我们前进的重要动力来源,谢谢!
护理统计随笔平台的内容现在已经非常丰富,很多方面都有涉及到,如果你觉得你没有看到往期的相关文章,不妨打开公众号的菜单页,在各级目录中查找你想要的内容。

一、线性混合效应模型
重复测量数据处理方法似乎是个老生常谈的话题了,之所以不厌其烦地反复分享这些东西,一是因为用的多;二是因为好用;三是此文权当备忘,以后用到的时候可以直接参考着做。后一个原因是,至今依然很多护理领域的老师还不熟悉此类数据的处理方法,一上来就是重复测量方差分析,甚至有些直接用t检验的……
真不建议随意用这个方法了,因为它的适用场景真的很苛刻,不信您可以去看看郑老师(医学论文与统计分析)的文章。
线性混合效应模型(Linear Mixed-Effects Model,简称LMM)是一种用于处理数据中固定效应(fixed effects)和随机效应(random effects)的统计模型。它特别适用于数据中存在分组结构或层次结构的情况,例如,重复测量数据、纵向数据或多级数据
线性混合效应模型的组成部分:
1. 固定效应(Fixed Effects):模型中的主要效应,通常对应于实验设计中的处理效应或控制变量。固定效应对所有个体或组都是相同的。
2. 随机效应(Random Effects):特定于个体或组的,并且假设它们是来自某个分布的随机抽样。随机效应允许模型捕捉数据中的个体差异或组内相关性。
为什么要使用线性混合效应模型?举例:处理非独立数据;捕捉个体或组间差异。
就此打住:本文不是来讲理论的,关于理论的学习需要您自己完成。笔者强烈推荐使用混合效应模型处理重复测量数据或纵向研究数据。需要注意的是,线性混合效应模型依然需要符合正态性假设。当然了,现实情况也可以适当放宽要求,但很多研究者会对不服从正态的变量做数据变换,这是严谨的做法。
我们公众号前期也分享了不少关于纵向数据分析的思路,有兴趣的老师可以看看(可从菜单页进去)。

时至今日,依然很多老师和同学不太熟悉如何建立一个线性混合效应模型,包括笔者也总是忘记具体的操作,下面以最常用的R、SPSS、STATA软件为例,分别展示如何建模,希望能帮助大家做研究,如果您觉得有用,不妨点个赞,添加收藏。

二、演示用的数据
这是一份长型数据(每行代表一次测量,共200余行),出自一份干预性研究(不分享,建议大家用自己的研究数据练习)。变量情况:
group是分组,二分类;time是测量次数,3水平;y1-y8是结局变量,都是计量资料(简单起见,假定其服从正态),本次分析的目的是探究调整混杂因素后的干预(group)效果,以y1为例。


、大家最喜欢的SPSS


解释一下上面的操作:
以y1为因变量,time、group、time和group的交互、age、sex作为固定效应,id(患者个体的编号)为随机效应,建立的一个随机截距模型(未设置随机系数),采用的协方差类型是“复合对称”,意思是任何两个时间点测量值的相关性是相等的。SPSS的结果很多,挑几个重要的:

这个指标用来选择模型。

这个结果可以用来判断效应是否显著,这里可以看出来:在控制了age、sex之后,group、time、交互效应都显著。

这里就类似于普通的回归参数表格了,解读也是类似的,先看显著性,再看系数。不过,SPSS似乎无法自由选择参考水平?time和group、sex都是分类变量,这里就默认以最大的值为参照了,无法自己选择,这点不太友好,可能得改赋值表。

这是随机效应结果,可以根据重复测量(残差Residual)的估计值和显著性看看设置随机效应是否必要,从这里看来,是有必要考虑个体随机效应的。

、“小而美:stata

stata的分析过程,一如既往的简洁,在导入同样的数据文件后,用下面一行指令搞定。

mixed y1 i.group  i.time i.sex age group#time, || id:, covariance(exchangeable) reml

当然了,如果你不想用指令,也可以直接用可视化界面,做对应的设置:

看看结果

除了系数估计不同之外(stata与spss的默认参考水平不同导致),其余是一致的。

、全能选手:R

R软件是我最喜欢的,相比于SPSS繁琐的设置步骤及一大堆输出,R可以高度自定义,想要输出什么结果全看自己想法。下面的代码,建立了一个与前面一致的随机截距模型。

library(lmerTest)library(tidyverse)
md = read_csv('testdata.csv')str(md)
md = md %>% mutate(group = factor(group), time = factor(time), sex = factor(sex,labels=c('male','female')) )
# 随机截距mod1 = lmer(y1~group*time+sex+age+(1|id),data=md)summary(mod1)anova(mod1)

与SPSS、Stata的结果是基本一致的,可谓是“英雄所见略同


至于如何选择软件?答:喜欢哪个就用哪个。本期分享就到这里,我们下期见。


提醒以上代码为笔者自用的数据分析方法,可能有笔者理解不当甚至使用错误的情况,还请各位见谅,欢迎指正。另外,我们申请了护理科研交流群,欢迎大家进群交流(入群方式:后台回复关键词“加群”)。


参考资料:

查看了R、Stata、SPSS的帮助文档。

封面和部分正文图片来自参考文献。

护理统计随笔
专注护理科研设计和统计分析。别人不会告诉你的干货,可以来这里找!
 最新文章