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 sy
mptoms,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个轨迹类别的模型对象。
运⾏代码得到图如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论