纵向研究之变化轨迹:R语言实现

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

一、用R实现潜类别增长模型
之前我们分享了如何用Mplus软件做潜类别增长模型( Latent Class GrowthAnalysis, LCGA)或组轨迹模型(Group-based trajectory modelling, GBTM),链接:又见轨迹研究?潜类别增长模型分析步骤
有网友咨询:“能用R语言实现吗?”当然是可以的,我们对读者朋友的留言向来是很重视的,这期就来聊聊R语言版LCGA或GBTM实现思路。
今天分享如何用R实现,方便起见,还是用与Mplus实操同一批数据,500行,6列,前四列(y1 y2 y3 y4)是要研究的主要指标,表示对变量y测量了4次,此变量属于连续型变量,具体信息未知(仅供练习,无实际意义),第五列是协变量x,本次分析时不会使用它,第六列同样不会使用。因此,本次演示的是没有协变量或预测变量的轨迹模型。
本期代码参考了下面这篇文章(建议阅读原文),笔者在此基础上做了不少的改动:

全部代码都在这里了(有代码解释大家可以自行取用。

# 轨迹分析# LCGA
library(lcmm)library(tidyverse)# devtools::install_github("hlennon/LCTMtools")library(LCTMtools)
# help(LCTMtools)# 加载数据集data = read.table("ex8.1.dat",col.names = c( "y1", "y2", "y3", "y4", 'x1','x2'))data %>% glimpse()data$id = seq(1,500,1) #增加个体编号
# 预处理,宽型数据变长型数据newd = data %>% pivot_longer( cols = y1:y4, names_to = 'times', values_to = 'y') %>% select(times,y,id)
newd %>% glimpse()
# 建模set.seed(123)
# 先建立一个基础模型,必须要有的mod1 = hlme(y~times, random=~times, subject = 'id', ng=1, data=newd )
# 依次拟合有2~7个潜在类别的增长模型(可以自己写个循环)# 速度比较慢mod2 = hlme(y~times, random=~times, subject = 'id', mixture=~times,#当ng>1时需要设置 ng=2, data=newd, B=mod1)mod3 = hlme(y~times, random=~times, subject = 'id', mixture=~times,#当ng>1时需要设置 ng=3, data=newd, B=mod1)
mod4 = hlme(y~times, random=~times, subject = 'id', mixture=~times,#当ng>1时需要设置 ng=4, data=newd, B=mod1)mod5 = hlme(y~times, random=~times, subject = 'id', mixture=~times,#当ng>1时需要设置 ng=5, data=newd, B=mod1, nproc=6)
mod6 = hlme(y~times, random=~times, subject = 'id', mixture=~times,#当ng>1时需要设置 ng=6, data=newd, B=mod1, nproc=6)mod7 = hlme(y~times, random=~times, subject = 'id', mixture=~times,#当ng>1时需要设置 ng=7, data=newd, B=mod1, nproc=6)summary(mod1)summary(mod2)LCTMtoolkit(mod2)bic = rbind(mod1$BIC,mod2$BIC,mod3$BIC,mod4$BIC,mod5$BIC,mod6$BIC,mod6$BIC)bic

# 上面的方法比较笨,我们可以用循环来实现,下面是个简单的演示# 可供大家参考,就不运行了for (i in 2:7) { modeli = hlme(y~times, random=~times, subject = 'id', mixture=~times, ng=i, data=newd, B=mod1, nproc=6 ) print(modeli$BIC)}
# 上述代码很慢,所以我可能更倾向于用Mplus跑LCGA
# 查看各模型的评价指标LCTMtoolkit(mod3)LCTMtoolkit(mod4)LCTMtoolkit(mod5)LCTMtoolkit(mod6)LCTMtoolkit(mod7)
# 模型比较LCTMcompare(mod4, mod5)
# 个体分配概率mod2$pprob
# 各类别比例summarytable(mod2)
# 数据出结果不易,保存下save.image() # 下次要用,可以直接导入模型load('.RData')
二、注意要点及个人看法
Hannah Lennon等学者在BMJ Open杂志发布了他们所构建的潜在类轨迹建模的框架,包括构建和解释模型,也包括如何选择最佳模型,并给出了具体分析步骤及R语言实现方法,笔者此处的代码也是参考了他们的方法。笔者发现了该框架与我们之前学习的Mplus分析步骤有较大的不同。

部分步骤截图
几个注意事项:
1、上述代码运行速度太慢,笔者是电脑是8核处理器,但跑起来也花了5~10分钟时间,数据量大,且不做优化的话,可能要更长,听部分网友反馈说花了半小时都没出来结果。所以,建议保存做出来的结果,方便下次使用。
2、笔者看到了一些公众号或知乎的博主对lcmm下轨迹模型的选择步骤,清一色是根据最小BIC来确定最优模型,但是我们知道,在Mplus中,我们不但要比较AIC、BIC,还会比较信息熵、LMR、BLRT、类别比例等指标,但是这些指标在R的lcmm包中似乎不完整甚至完全是没有,所以不好说。
3、Hannah Lennon等学者给出了不一样的模型评价(或者说选择)体系和指标这个可以通过该研究团队开发(似乎是)的LCTMtools包来做,笔者在上面的代码中有演示具体做法。

4、可视化方法与Mplus的不一样,他们这里是用predict+plot来实现的。
综合上述因素,个人不太推荐用R来做,相比来说,Mplus更简单明了且指标完整

三、常用心理统计方法汇总
福利环节。
笔者已经在护理统计随笔公众号上,分享了众多心理统计方法的实现步骤,既有Mplus软件的,也有R语言的。在中介效应和调节分析模块,笔者还分享了简单实用的SPSS Process分析方法。
下面是笔者总结的一些常用建模方法(自行总结,不权威,仅供参考),以思维导图的形式呈现,两幅图是一样的,只是配色和风格不同,有兴趣的老师可以自取。


小提醒:笔者水平有限,上述内容如有不当之处,还望海涵。如果你在科研学习中遇到了疑问,恰好也想跟网友们交流,可以加入我们建立的“护理科研交流群”。这是一个完全自由、开放、免费、没有套路的纯交流群。加群方式:后台私信关键词“加群”。

参考文献:

Lennon H, Kelly S, Sperrin M, Buchan I, Cross AJ, Leitzmann M, Cook MB, Renehan AG. Framework to construct and interpret latent class trajectory modelling. BMJ Open. 2018 Jul 7;8(7):e020683. doi: 10.1136/bmjopen-2017-020683. PMID: 29982203; PMCID: PMC6042544.

正文图片来自上述参考文献,封面是笔者自己画的思维导图。本文仅供学习、分享使用,如有侵权,请联系我们删除,谢谢。

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