R语言群体轨迹建模求助:flexmix轨迹绘制及工具选择
轨迹分组与可视化问题解决方案
一、修正flexmix代码:适配序数变量+正确绘制拟合轨迹
你的核心问题有两个:一是用了默认的线性模型拟合序数变量Y(1-5),导致分组逻辑不符合数据特性;二是绘图用原始数据的均值变化,没有展示模型拟合的分组轨迹,所以效果不佳。以下是修正后的代码:
library(dplyr) library(flexmix) library(ggplot2) library(ordinal) # 读取数据(替换为你的数据文件路径) data <- read.csv("your_data.csv") # 拟合序数混合模型(适配Y的序数属性) fit <- flexmix(Y ~ t + I(t^2) | ID, data = data, k = 3, model = FLXMRclm()) # 用序数回归模型替代默认线性模型 # 为每个样本分配分组 data$group <- clusters(fit) # 生成覆盖全时间范围的序列,用于预测轨迹 t_seq <- seq(min(data$t), max(data$t), length.out = 100) # 提取每个分组的模型,计算预测值(序数变量的期望) group_preds <- lapply(1:3, function(g) { model <- getModel(fit, g) pred_data <- data.frame(t = t_seq) pred_data$group <- g # 预测各Y值的概率,计算期望作为轨迹代表值 prob_preds <- predict(model, newdata = pred_data, type = "prob") pred_data$pred_Y <- rowSums(prob_preds * 1:5) pred_data }) %>% bind_rows() # 绘制轨迹图:原始数据点+拟合轨迹 ggplot() + geom_point(data = data, aes(x = t, y = Y, color = as.factor(group)), alpha = 0.3) + geom_line(data = group_preds, aes(x = t, y = pred_Y, color = as.factor(group)), linewidth = 1) + labs(title = "Y的分组轨迹拟合", x = "距首次记录的月数", y = "Y的预测期望", color = "分组") + theme_minimal()
二、更适合新手的轨迹分组工具推荐
如果你觉得flexmix的语法太复杂,推荐两个专门做轨迹分组的工具,更贴合你的需求:
1. traj包(入门首选)
专门针对纵向数据的轨迹分析,支持序数变量,操作简单,自带绘图功能。需要先把长格式数据转成宽格式:
library(traj) library(tidyr) # 长转宽:每个ID一行,列对应不同时间点的Y值 wide_data <- data %>% pivot_wider(id_cols = ID, names_from = t, values_from = Y) # 运行序数轨迹分组(指定nclusters为你想要的组数) traj_fit <- traj(wide_data[, -1], model = "ORD", nclusters = 3) # 直接绘制轨迹图 plot(traj_fit)
2. lcmm包(功能进阶)
适合复杂纵向数据的潜类别混合模型,支持序数、连续等多种结局变量,能处理时间点不一致的情况,结果更严谨。
三、补充说明
- 你之前尝试的gbmt是梯度提升树,这类工具更适合预测或变量筛选,不适合轨迹分组这类“找相似模式”的任务;
- 选择组数k时,可以通过
flexmix的logLik或者traj包的模型诊断指标(如BIC)来确定最优组数,不要直接指定3。
内容的提问来源于stack exchange,提问作者Tasosmav
相关产品推荐
相关产品推荐

