R数据分析:潜类别轨迹模型LCTM的做法,实例解析
最近看了好多潜类别轨迹latent class trajectory models的文章,发现这个方法和我之前常用的横断面数据的潜类别和潜剖面分析完全不是一个东西,做纵向轨迹的正宗流派还是这个方法,当然了这个方法和潜增长和增长曲线模型在做法并没有实际区别,都是用的hlme这个函数。但是文献中的叫法和花样就比较多了。
像本文写的latent class trajectory models,之前写的潜类别增长模型LCGA和增长曲线模型GMM都是潜类别线性混合模型latent class linear mixed models (LCLMM)的分支。
The major difference between LCGA and GMM is that LCGA does not allow within-class variation whereas GMM does allow within-class variation
像这一类的模型都是用hlme这个函数跑,这篇文章也可以看作是作为之前的潜增长和增长曲线文章的一个实际应用的延续。
应用背景
很多的同学关心某个变量的纵向发展轨迹,并且还感兴趣不同轨迹对某个结局的影响如何。如果你的研究也涉及到这样的问题,你就可以考虑用潜类别轨迹模型了,参考文献也甩给大家,大家感兴趣可以去瞅瞅下面这个文章:
Mirza, S. S., Wolters, F. J., Swanson, S. A., Koudstaal, P. J., Hofman, A., Tiemeier, H., & Ikram, M. A. (2016). 10-year trajectories of depressive symptoms and risk of dementia: a population-based study. The Lancet Psychiatry, 3(7), 628-635.
文章作者通过潜类别轨迹模型将人群抑郁症状发展轨迹分成了5类,最终发现只有特定类轨迹才和随后的痴呆有关系,这对痴呆的干预和抑郁痴呆的关系的认识都是有重要意义的。
今天我就仿照这篇文章给大家写写如何做潜类别轨迹模型。
潜类别轨迹的报告内容
做之前我们还是看看这篇文献中是如何介绍这个方法的。
We used latent class trajectory models to identify trajectories of depressive symptoms over time. This is a specialised form of finite mixture modelling, and is designed to identify latent classes of individuals following similar progressions of a determinant over time or with age.
可以看到这个方法在重要作用是识别那些随着时间或者年龄拥有相似症状和疾病进程的人群类别。比如做抑郁的潜类别轨迹就是要识别出人群中可能的抑郁进程亚组。文章中也说明了这个模型就是一个特殊的混合模型specialised form of finite mixture modelling。
在拟合症状随着时间或者年龄变化的时候,我们允许或者说我们需要去考虑症状和时间的曲线关系的,就是说不能简单第认为某个症状的纵向变化一定是线性的,意思就是我们要考虑时间变量的高次项,一般来讲二次就够了。作者的论文中也是加了时间的二次项的。然后根据BIC确定最优类别数,同时确保后验概率大于0.7,类别人数大于0.02.
最终作者出图如下:
作者根据这个轨迹走势,还给每个类别进行了命名,打上标签,包括Low symptoms,Decreasing symptoms,Remitting symptoms,Increasing symptoms, High symptoms,然后将轨迹标签作为预测变量进行了后续的生存分析。
对于轨迹部分结果的报告,因为这个文章轨迹只是一部分而并非主要目的,所以报告很少,只有每一个轨迹的人群数量和占比。
接下来给大家分享如何做这么一个潜类别轨迹。
潜类别轨迹的做法
潜类别轨迹有专门的R包可以做,感兴趣的同学可以去看这篇文章:
Lennon H, Kelly S, Sperrin M, et al Framework to construct and interpret latent class trajectory modelling BMJ Open 2018;8:e020683. doi: 10.1136/bmjopen-2017-020683
上面这篇文章给出了潜类别轨迹模型的做法框架,共8步:
本文的绝大部分步骤也都是参考的上面的文章。
现在我手上的数据长这样:
一个纵向的长型数据,包括每个人不同年龄段测得的bmi,我现在就想看看随着年龄的增长,人群bmi轨迹是不是存在异质性亚组。接下来我就用潜类别轨迹模型回答这个问题,并且出图,并得到每个轨迹类别的人数和占比。
首先我们写出轨迹类别数量为1时候的潜类别轨迹的代码:
m.1 <- hlme(bmi ~ 1+ age + I(age^2),
random = ~ 1 + age,
ng = 1,
data = data.frame(bmi), subject = "id")
关于hlme之前给大家写过各个参数的意思,上面的代码就是要拟合bmi随着年龄变化的轨迹,同时考虑年龄的随机效应(截距+斜率),并声明嵌套的高水平subject = "id"。运行上面的代码我们就拟合了一个轨迹类别为1的模型。
之后我们还需要拟合2到7个类别的模型,这个7是上面文献推荐的哈,我们可以写个循环语句,一次搞定(为什么不从模型1循环到7呢?是因为ng参数为1时我们并不需要设定mixture参数,所以2到7写了循环,1单独做):
lin <- c(m.1$ng, m.1$BIC)
for (i in 2:7) {
mi <- hlme(fixed = bmi ~ 1+ age + I(age^2),
mixture = ~ 1 + age + I(age^2),
random = ~ 1 + age,
ng = i, nwg = TRUE,
data = data.frame(bmi), subject = "id")
lin <- rbind(lin, c(i, mi$BIC))
}
7个模型跑完,我们需要对比每个模型的BIC(这个也是参考的The Lancet Psychiatry那篇文章的做法),所以我们对模型和相应的BIC进行展示:
从上图就可以看得出我们轨迹数量确定为5个时,模型的BIC最小,由此可以确定轨迹数量为5。
按照论文报告的要求我们需要出图,根据图中每条轨迹的走势确定轨迹类别标签,还有每个轨迹类别的人群数量和占比,具体方法如下:
首先,进行图形的绘制,我们解决这类问题(包括机器学习模型)的基本思路依然是通过自我数据得到模型,通过模型拟合新数据出图,代码如下:
plotpred <- predict(m5, datnew, var.time ="age", draws = TRUE)
plot(plotpred, lty=2,xlab="Age", ylab="BMI", legend.loc = "topleft", cex=0.75)
上面的代码中m5为我们拟合的5个轨迹类别的模型对象。
运行代码得到图如下:
然后我们就可以根据图的走势给每个潜类别轨迹打上有临床意义的标签了,有了标签就可以进行后续的建模了。
然后我们还需要报告每个轨迹类别的人数和占比,方法如下:
m5$pprob
运行代码即可得到,每个个案到底属于哪个轨迹类别,以及其属于每个轨迹类别的概率,如下图:
到这儿我们的模型基本跑完了,论文中有提到后验概率大于0.7,类别人数大于0.02,这个在模型总结中也是可以调出来的:
基本上掌握了上面的方法,柳叶刀精神病学那篇文章的前半部分统计分析就完成了,如果你想将某个症状或者疾病发展的轨迹作为自变量的相关研究都可以进行了,好了今天要给大家分享的潜类别轨迹模型的做法就是这样。
后记:写完这篇文章,我越来越觉得潜类别轨迹模型和增长混合模型就是一个东西,只不过不同的学者用词不一样,不知各位看官怎么看,可以私信我交流。
另外,还特别建议大家好好去看lcmm包的说明文档,相信大家看完之后还会有更大收获。
小结
今天给大家写了潜类别轨迹的做法,感谢大家耐心看完,自己的文章都写的很细,代码都在原文中,希望大家都可以自己做一做,请转发本文到朋友圈后私信回复“数据链接”获取所有数据和本人收集的学习资料。如果对您有用请先收藏,再点赞分享。
也欢迎大家的意见和建议,大家想了解什么统计方法都可以在文章下留言,说不定我看见了就会给你写教程哦,另欢迎私信。
如果你是一个大学本科生或研究生,如果你正在因为你的统计作业、数据分析、模型构建,科研统计设计等发愁,如果你在使用SPSS, R,Python,Mplus, Excel中遇到任何问题,都可以联系我。因为我可以给您提供最好的,最详细和耐心的数据分析服务。
如果你对Z检验,t检验,方差分析,多元方差分析,回归,卡方检验,相关,多水平模型,结构方程模型,中介调节,量表信效度等等统计技巧有任何问题,请私信我,获取详细和耐心的指导。
If you are a student and you are worried about you statistical #Assignments, #Data #Analysis, #Thesis, #Reports, #Composing, #Quizzes, Exams.. And if you are facing problem in #SPSS, #R-Programming, #Excel, Mplus, then contact me. Because I could provide you the best services for your Data Analysis.
Are you confused with statistical Techniques like z-test, t-test, ANOVA, MANOVA, Regression, Logistic Regression, Chi-Square, Correlation, Association, SEM, multilevel model, mediation and moderation etc. for your Data Analysis...??
Then Contact Me. I will solve your Problem...
加油吧,打工人!
往期精彩
R数据分析:什么是人群归因分数Population Attributable Fraction
R数据分析:随机截距交叉滞后RI-CLPM与传统交叉滞后CLPM
R数据分析:潜类别轨迹模型LCTM的做法,实例解析的更多相关文章
- R数据分析:临床预测模型中校准曲线和DCA曲线的意义与做法
之前给大家写过一个临床预测模型:R数据分析:跟随top期刊手把手教你做一个临床预测模型,里面其实都是比较基础的模型判别能力discrimination的一些指标,那么今天就再进一步,给大家分享一些和临 ...
- R数据分析:二分类因变量的混合效应,多水平logistics模型介绍
今天给大家写广义混合效应模型Generalised Linear Random Intercept Model的第一部分 ,混合效应logistics回归模型,这个和线性混合效应模型一样也有好几个叫法 ...
- R数据分析:跟随top期刊手把手教你做一个临床预测模型
临床预测模型也是大家比较感兴趣的,今天就带着大家看一篇临床预测模型的文章,并且用一个例子给大家过一遍做法. 这篇文章来自护理领域顶级期刊的文章,文章名在下面 Ballesta-Castillejos ...
- R数据分析:如何简洁高效地展示统计结果
之前给大家写过一篇数据清洗的文章,解决的问题是你拿到原始数据后如何快速地对数据进行处理,处理到你基本上可以拿来分析的地步,其中介绍了如何选变量如何筛选个案,变量重新编码,如何去重,如何替换缺失值,如何 ...
- 潜类别模型(Latent Class Modeling)
1.潜类别模型概述 潜在类别模型(Latent Class Model, LCM; Lazarsfeld & Henry, 1968)或潜在类别分析(Latent Class Analysis ...
- R数据分析:纵向数据如何做中介,交叉滞后中介模型介绍
看似小小的中介,废了我好多脑细胞,这个东西真的不简单,从7月份有人问我,我多重中介,到现在的纵向数据中介,从一般的回归做法,到结构方程框架下的路径分析法,到反事实框架做法,从中介变量和因变量到是连续变 ...
- Python 和 R 数据分析/挖掘工具互查
如果大家已经熟悉python和R的模块/包载入方式,那下面的表查找起来相对方便.python在下表中以模块.的方式引用,部分模块并非原生模块,请使用 pip install * 安装:同理,为了方便索 ...
- 精心整理(含图版)|你要的全拿走!(R数据分析,可视化,生信实战)
本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/ZEjaxDifNATeV8fO4krOIQ更多关于R语言,ggplot2绘图,生信分析的内容,敬请关注小号. 为 ...
- R数据分析:生存分析与有竞争事件的生存分析的做法和解释
今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...
随机推荐
- Zookeeper原理系列-Paxos协议的原理和Zookeeper中的应用分析
Paxo算法介绍 Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法. Paxos产生背景 Paxos算法是基于消息传递且具有高度容错特性的一致 ...
- Java基础- 重写,重构和重载
重写也称为覆盖, 是指子类与父类的方法名相同但是可以有不同的权限(子类权限需大于父类),返回值(J2SE 5.0以后增加的功能,且子类的返回值必须是父类返回值的子类)或者方法实现. 重写体现了子类补充 ...
- 最新.NET MAUI有什么惊喜?
.NET 6 Preview 7 现已发布啦,我们为 .NET 多平台应用程序 UI (MAUI) 引入了所有的新布局.这是性能和可靠性的重大变化.我们很高兴我们还增加了一些关于accessibili ...
- dubbo-admin的使用
目录 了解 dubbo-admin 下载 dubbo-admin 使用 dubbo-admin 1.dubbo-admin是什么 dubbo-admin是一个监控程序,可以通过web很方便的管理监控众 ...
- 1. SSTI(模板注入)漏洞(入门篇)
好久没更新博客了,现在主要在作源码审计相关工作,在工作中也遇到了各种语言导致的一些SSTI,今天就来大概说一下SSTI模板注入这个老生常谈的漏洞 前言 模板引擎 模板引擎(这里特指用于Web开发的模板 ...
- 【c++ Prime 学习笔记】第7章 类
类的基本思想是数据抽象和封装 数据分离抽象是一种依赖于接口和实现分离的编程/设计技术.接口包括用户能执行的操作,实现包括类的数据成员.接口实现的函数体.定义类所需的各种私有函数 封装实现了类的接口和实 ...
- 改善深层神经网络-week1编程题(Initializaion)
Initialization 如何选择初始化方式,不同的初始化会导致不同的结果 好的初始化方式: 加速梯度下降的收敛(Speed up the convergence of gradient desc ...
- 深入浅出Java内存模型
面试官:我记得上一次已经问过了为什么要有Java内存模型 面试官:我记得你的最终答案是:Java为了屏蔽硬件和操作系统访问内存的各种差异,提出了「Java内存模型」的规范,保证了Java程序在各种平台 ...
- NKOJ-4573 Falsita
问题描述: 到海边了呢...... 如果没有那次选择,现在是不是会好些呢...... 都过去了. 仰望着星空,迎面吹过一阵阵海风,倚靠着护栏,Fine 在海边静静地伫立着,在一个个无际的长夜后,Fin ...
- 零基础入门该如何实现C 语言面向对象编程(很有帮助)
零基础如果更快更好的入门C语言,如何在枯燥的学习中找到属于自己的兴趣,如果把学习当成一种事务性的那以后的学习将会很难有更深入的进步,如果带着乐趣来完成学习那将越学越有意思这样才会让你有想要更深入学习的 ...