组基轨迹建模 GBTM的介绍与实现(Stata 或 R)

基本介绍

组基轨迹建模(Group-Based Trajectory Modeling,GBTM)(旧名称:Semiparametric mixture model)

历史:由DANIELS.NAGIN提出,发表文献《Analyzing Developmental Trajectories:A  Semiparametric,Group-Based Approach》

GBTM能够将一群人的轨迹分类并生成数个具有代表性的运动轨迹模型,然后对每个轨迹模型进行分析,以了解人们的运动特征、生理水平和风险等级等。GBTM的核心思想是将人群分成几组,每组中的人员都具有类似的运动规律,这些规律被用于描述和预测他们未来的运动轨迹,从而为个人和群体的健康管理提供更科学的依据。

  • 主要用于分析纵向数据,探索总体中的异质性
  • 原理:假定总体存在异质性,即总体中存在若干个不同发展轨迹或模式的潜在亚组
  • 目的:探索总体中包含有多少个发展趋势不同的亚组,并确定各亚组的发展轨迹
  • 轨迹的等级与形状由模型的回归参数决定,模型的回归参数通过最大似然比估计

组轨迹建模流程

组轨迹模型的建立是需要不断建立、反馈、修正的过程。
1.拟合1~6组轨迹模型,每个轨迹分别拟合线性、平方和立方
2.通过模型计算模型参数估计,剔除无意义的估计项,重新拟合。
3.通过比较不同模型间的拟合评价指标和专业可解释性选择合适的轨迹。
4.评价模型内充分性

实现方法

1. 基于Stata 【traj包】

安装包命令

new install traj, force

数值格式: 目标变量的纵向指标+采集时间

 导入数据

import delimited ".\data.csv", clear

 GBTM分析

# GBTM分析
# s1 到 s5 和 t1 到 t5 是变量名,s1到s5作为重复测量的自变量,t1到t5作为时间变量
traj,var(s1-s5)indep(t1-t5)model(cnorm) min(0) max(30)order (3 3 2)
  • traj: 表示进行轨迹分析。
  • var(s1-s5): 指定要进行轨迹分析的变量,这里使用s1到s5作为变量。
  • indep(t1-t5): 指定作为独立变量的时间变量,这里使用t1到t5作为时间变量。
  • model(cnorm): 指定模型类型为连续型的正态模型。
  • min(0) max(30): 指定轨迹分析的时间范围为0到30。
  • order(3 3 2): 指定轨迹分析中的多项式次数,这里选择三次多项式。

# 绘图
traj plot,x title(YearsSince Baseline) y title(MMSEscore)cix label(0(3) 12) ylabel
(0(5)30)
  •  traj: 表示进行轨迹分析。
  • var(s1-s5): 指定要进行轨迹分析的变量,这里使用s1到s5作为变量。
  • indep(t1-t5): 指定作为独立变量的时间变量,这里使用t1到t5作为时间变量。
  • model(cnorm): 指定模型类型为连续型的正态模型。
  • min(0) max(30): 指定轨迹分析的时间范围为0到30。
  • order(3 3 2): 指定轨迹分析中的多项式次数,这里选择三次多项式,多次重复拟合

 

order参数的设定【重要】

确定亚组数及其轨迹需要多次重复拟合,才能获得最佳轨迹数目及形状。一般先从较少亚组数开始拟合,每一亚组先从高阶开始,若高阶参数无统计学意义则去除继续拟合低阶参数

多次尝试寻找最佳参数 参考指标: 查看Maximum Likelihood Estimates  Model:Censored Normal(c norm) 的输出表格

通过查看Prob > |T| 【即P值】,一般需要选取该分组的最高阶具有统计学意义。

 

最佳分组数量如何确定?

贝叶斯信息标准(Bayesianinformationcriterion,BIC)

  • BIC值绝对值越小--趋0, 表示模型拟合程度越好
  • 查看方式:查看Maximum Likelihood Estimates  Model:Censored Normal(c norm) 的输出表格的最下方

平均验后分组概率(average posterioror ob ability,AvePP)

  • 判定每一个体被归属为特定轨迹的概率,越接近1越好
  • 反映每一个体被分到相应亚组的后验概率
  • >0.7时,作为模型可以接受的标准
  • 查看方式:需要命令实现
    • list_traj_Group-_traj_ProbG1

2. 基于R 【trajeR包】

TrajeR 支持几种数据分布

  • 审查(或定期)正常分配;
  • 零膨胀泊松分佈;
  • 泊松分布;
  • 伯努利分布;
  • Β分布(只包括可能性) ;
  • 没有线性回归

每个亚组的运动轨迹采用多项式建模,也可以采用非线性模型。

包的主要函数

安装与加载

## install dev version of trajeR from github
devtools::install_github("gitedric/trajeR")

## load trajeR package
library(trajeR)

trajeR() 最重要的函数

trajeR(
  Y,
  A,
  Risk = NULL,
  TCOV = NULL,
  degre = NULL,
  degre.nu = 0,
  degre.phi = 0,
  Model,
  Method = "L",
  ssigma = FALSE,
  ymax = max(Y, na.rm = TRUE) + 1,
  ymin = min(Y, na.rm = TRUE) - 1,
  hessian = TRUE,
  itermax = 100,
  paraminit = NULL,
  ProbIRLS = TRUE,
  refgr = 1,
  fct = NULL,
  diffct = NULL,
  nbvar = NULL,
  ng.nl = NULL,
  nls.lmiter = 50
)
 参数

Y: 模型中变量的矩阵。
A:模型中变量的矩阵。
Risk:一个可选的矩阵,修改属于群的概率。默认情况下,它的值是一个矩阵,其中一列的值为1
TCOV:一个可选的矩阵,包含影响轨迹本身的时间协变量。默认值为 NULL。
degre:整数向量,每个多项式中最高次幂的指数
degre.nu:整数向量。 ZIP 模型中所有泊松部分的度。
degre.phi:整数向量。 BETA 模型中 β 参数的度。
Model: 指定模型,该值为 LOGIT :混合模型的 LOGIT;截尾正态混合模型的 CNORM 或零膨胀泊松混合模型的 ZIP。
Method:指定用于查找模型参数的方法。最大似然估计法则为 L,内含拟牛顿法的期望最大化方法的值为 EM,迭代加权最小二乘法的期望最大化方法的值为 EMIWRLS。
sigma:默认情况下,它的值为 FALSE。对于 CNORM 模型,指出我们是否需要对所有正常密度函数使用相同的 σ。
ymax:对于 CNORM 模型,指示数据的最大值。它只关注有删失数据的模型。默认情况下,它的值是数据加1的最大值。
ymin:对于 CNORM 模型,指示数据的最小值。它只关注有删失数据的模型。默认情况下,它的值是数据的最大值减1。
hessian:指出我们是否要计算hessian 矩阵。默认是FALSE。如果使用的方法是似然的,hessian 是通过反转信息的费舍尔矩阵计算。为了避免数值奇异矩阵,我们利用 MASS 包中的 ginv 函数求出伪逆矩阵。如果方法是 EM 或 EMIWRLS,则采用路易斯法计算hessian 。
itermax:表示优化函数或 EM 算法的最大迭代次数。
paraminit:初始参数向量。在默认情况下,trajeR 根据范围或标准差计算初始值。
ProbIRLS:指出了预测器概率搜索中的起诉方法。如果 TRUE (默认)我们使用 IRLS 方法,如果 FALSE 我们使用优化方法。
refgr:引用组的数目。默认为1。
fct:非线性模型中函数 f 的定义
diffct:非线性模型中函数 f 的微分
nbvar:非线性模型中变量的个数。
ng.nl:非线性模型的亚组数
nls.l miter:非线性模型的组数

输出结果
  • beta:参数 β 的向量
  • delta:时间协变量
  • theta:用时间协变量
  • sd:参数的标准差的向量。
  • tab:一个包含所有参数和标准差的矩阵
  • Likelihood:由参数得到的似然的实数
  • ng,:由参数得到的似然的实数
  • model:由参数得到的似然的实数
  • method:所用方法的字符串。

load("data/dataNORM01.RData")
solL = trajeR(data[,1:5], data[,6:10], ng = 3, degre=c(2,2,2), 
              Model="CNORM", Method = "L", ssigma = FALSE, 
              hessian = TRUE)


拟合模型

#读取数据
data = read.csv(system.file("extdata", "CNORM2gr.csv", package = "trajeR"))
data = as.matrix(data)
# 拟合模型
sol = trajeR(Y = data[, 2:6], A = data[, 7:11], degre = c(2,2), Model = "CNORM", Method = "EM")

# 结果输出
print(sol)

# 绘图 【如下】
plotrajeR(sol)
# 结果输出 
> print(sol)
Call TrajeR with 2 groups and a 2,2 degrees of polynomial shape of trajectory.
Model : Censored Normal
Method : Expectation-maximization 
 
  group   Parameter   Estimate   Std. Error   T for H0:   Prob>|T|  
                                               param.=0             
--------------------------------------------------------------------
      1   Intercept   11.04411      2.45556     4.49759      1e-05  
             Linear   -9.31101      1.88182    -4.94787          0  
          Quadratic    0.94224      0.30679     3.07128    0.00237  
                                                                    
      2   Intercept   -6.00923      2.61924    -2.29426    0.02261  
             Linear    6.98117      1.99415     3.50082    0.00055  
          Quadratic   -1.14198      0.32309     -3.5345    0.00049  
--------------------------------------------------------------------
      1      sigma1    4.96653      0.37773    13.14835          0  
      2      sigma2    6.60139      0.38434    17.17574          0  
--------------------------------------------------------------------
      1         pi1    0.38688       0.0697     5.55096          0  
      2         pi2    0.61312       0.0697     8.79716          0  
--------------------------------------------------------------------
Likelihood : -830.0071

 

模型评估

用于评估模型的充分性(Adequacy of the model)。adequacy() 函数可以计算五种方法的总结结果,包括:分配比例(assignment proportion)、平均后验概率(average posterior probability)、置信区间(confidence interval)、正确分类的几率(odds of Correct Classification)。

adequacy(sol, Y = data[, 2:6], A = data[, 7:11])

# 结果输出
# 1          2
# Prob. est.  0.4436785  0.5563215
# CI inf.     0.2230186  0.4482696
# CI sup.     0.5462226  0.7746488
# Prop.       0.3800000  0.6200000
# AvePP       0.9837616  0.9789556
# OCC        96.0110285 29.3529000

分组概率情况 

# 每个个体分别分配到每个组的概率
GroupProb(sol, Y=data[, 2:6], A=data[, 7:11])
head(GroupProb(sol, Y=data[, 2:6], A=data[, 7:11]))
#         Gr1          Gr2
# [1,] 2.205715e-09 0.9999999978
# [2,] 9.985604e-01 0.0014396289
# [3,] 1.121664e-09 0.9999999989
# [4,] 9.510136e-03 0.9904898637
# [5,] 9.996207e-01 0.0003792992
# [6,] 4.502507e-06 0.9999954975


# 计算每个亚组的个体的比例
propAssign(sol, Y = data[, 2:6], A = data[, 7:11])
# 1    2
# [1,] 0.38 0.62

批量建模参考

data = read.csv(system.file("extdata", "CNORM2gr.csv", package = "trajeR"))
data = as.matrix(data)
degre = list(c(2,2), c(1,1), c(1,2), c(2,1), c(0,0), c(0,1), c(1,0), c(0,0), c(0,2), c(2,0))
sol = list()
for (i in 1:10){
  sol[[i]] = trajeR(Y = data[, 2:6], A = data[, 7:11], 
                    degre = degre[[i]], Model = "CNORM", Method = "EM")
  }

资料来源

GitHub - gitedric/trajeR: Group Based Modeling Trajectory

trajeR: Fitting longitudinal mixture models in trajeR: Group Based Modeling Trajectory

纵向数据分析之组轨迹模型(GBTM)_哔哩哔哩_bilibili

如何利用重复测量的数值变量,评估其发展轨迹/变化趋势——基于Stata软件的组基轨迹建模Group-Based Trajectory Modeling方法介绍_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/430012.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言简介、环境与基础语法及注释

R语言简介、环境与基础语法及注释 一、R语言1.R语言简介2.R语言官网3.R语言中国的镜像网站4.R语言下载5.R语言的历史 二、R语言环境1.Windows安装1.1 去 R 语言下载的镜像站点的列表下载1.2 选择版本进行下载1.3 点击运行1.4 一路默认,安装完毕! 2.Linux…

Golang Channel 详细原理和使用技巧

1.简介 Channel(一般简写为 chan) 管道提供了一种机制:它在两个并发执行的协程之间进行同步,并通过传递与该管道元素类型相符的值来进行通信,它是Golang在语言层面提供的goroutine间的通信方式.通过Channel在不同的 goroutine中交换数据,在goroutine之间…

yolov9训练

目录 说明 1、下载代码安装新的python环境 2、准备数据 3、修改代码 说明 本文参考该博主的文章,在已经有数据的情况,进行简单总结。需要详细版见原文链接如下:YOLOV9保姆级教程-CSDN博客 1、下载代码安装新的python环境 代码下载&…

阿里巴巴面试题:亿级商品如何存储?

嗨,各位小米粉丝们,欢迎来到小米的科技分享专栏!今天我们要聊的话题可是相当的烧脑,它来自阿里巴巴的一道面试题:亿级商品如何存储?别急,让我一一为你解密! 分库分表 当我们面对需要处理海量数据的情况时,基于 Hash 取模和一致性 Hash 实现分库分表是一个常见且有效…

【机器学习】生成对抗网络GAN

概述 生成对抗网络(Generative Adversarial Network,GAN)是一种深度学习模型架构,由生成器(Generator)和判别器(Discriminator)两部分组成,旨在通过对抗训练的方式生成逼…

【大前端】EChart 多系列柱状图绘制背景图

背景 在ECharts中,设置柱状图背景色,可通过backgroundColor设置,但仅限于单系列柱状图,所以在多系列柱状图中就需要用下面的方式设置 解决方案 1. xAxis.splitArea 如果设置的背景图的宽度占比为100%,则可以使用该方…

聊聊最近成交的一个小外贸订单

聊聊最近的一个小订单的故事吧,这个客户是个新手买家,也属于第一次在网上购物,客户在年前开始询问产品,而且当时正好是假期。 其实按照正常的处理思路来说,应该告诉客户现在是假期,大概是在什么时候恢复工…

详解点云PFH点云特征直方图原理(matlab代码实现)

原理; 原始论文下载【免费】(2008PFH)点云特征直方图原创论文,2008年资源-CSDN文库https://download.csdn.net/download/Vertira/88911005 PFH 特征描述是基于特征点(keypoint)与其邻域点的空间几何关系来编码的。如图1所示&…

深度学习_19_卷积

理论: 目前问题在于识别图片所需要的模型权重数量会比较大 一般图片像素在12M也就是一千两百万像素,要用模型对其整体识别的话,需要至少一千两百万权重,那也仅仅是线性模型,若用多层感知机的话,模型的数据…

B站自研色彩空间转换引擎

本期作者 1. 背景 色彩空间(Color Space)是一种数学模型,用于描述和表示颜色的方式。不同的色彩空间有不同的用途和特点,可以用于不同的应用,如图像处理、计算机图形、印刷、摄影等领域。它一般用于描述设备的色彩能…

javaWebssh药品进销存信息管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh药品进销存信息管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOM…

Unity2023.1.19_DOTS_JobSystem

Unity2023.1.19_DOTS_JobSystem 上篇我们知道了DOTS是包含Entity Component System,Job System,Burst compiler三者的。接下来看下JobSystem的工作原理和具体实现。 简介: 官方介绍说:JobSystem允许您编写简单而安全的多线程代…

【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 Docker 是什么? Docker 的作用 Docker 在 Linux 中的重要性 结语 我的其他博客 前言 随着软件开发的不断发展&…

虚拟化之CPU

一 cpu 1 如何查看内核版本:uname -r 2 如何查看操作系统的发行版本:cat /etc/redhat-release 3 计算机系统子的系统 cpu处理器memory内存storage存储network 网络Display显示 4 进程模式 用户模式(user mode)主要处理I/O的模…

2024年【G1工业锅炉司炉】考试报名及G1工业锅炉司炉模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉考试报名是安全生产模拟考试一点通生成的,G1工业锅炉司炉证模拟考试题库是根据G1工业锅炉司炉最新版教材汇编出G1工业锅炉司炉仿真模拟考试。2024年【G1工业锅炉司炉】考试报名及G1工业锅炉…

HarmonyOS 获取位置信息

1. HarmonyOS 获取位置信息 1.1. 官方文档 权限申请 位置服务 1.2. 权限申请 1.2.1. 配置位置权限信息 "requestPermissions": [//API9之前只申请这个就可以米级定位{name: ohos.permission.LOCATION},//API9之前申请的权限//API9后两个权限同时申请才可以获取米…

链路负载均衡之DNS透明代理

一、DNS透明代理 一般来说,企业的客户端上都只能配置一个运营商的DNS服务器地址,DNS服务器通常会将域名解析成自己所在ISP内的Web服务器地址,这将导致内网用户的上网流量都集中在一个ISP的链路上转发,最终可能会造成链路拥塞&…

C++之智能指针

为什么会有智能指针 前面我们知道使用异常可能会导致部分资源没有被正常释放, 因为异常抛出之后会直接跳转到捕获异常的地方从而跳过了一些很重要的的代码, 比如说下面的情况: int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument(&q…

windows下的反调试探究——原理

原理 我们在前面介绍了一些反调试的手段,基本上都是通过对内核的某个标志进行修改来达到反调试的效果,但是这里有一个问题就是,如果分析人员对我们的样本的API进行了hook,那么我们的反调试手段都将作废,也就是说我们还…

【LeetCode】升级打怪之路 Day 13:优先级队列的应用

今日题目: 23. 合并 K 个升序链表 | LeetCode378. 有序矩阵中第 K 小的元素 | LeetCode373. 查找和最小的 K 对数字 | LeetCode703. 数据流中的第 K 大元素 | LeetCode347. 前 K 个高频元素 | LeetCode 目录 Problem 1:合并多个有序链表 【classic】LC 2…