R中使用GAMs基于单时间点协变量预测纵向数据变化的方法咨询
实现步骤
1. 数据预处理
核心是提取每个受试者的时间点1(基线)预测变量值,同步匹配到该受试者所有波次的观测行中,同时剔除无基线数据的受试者:
# 加载依赖包 library(mgcv) library(dplyr) # 数据处理 df_processed <- df %>% group_by(ID) %>% # 生成基线预测变量列,同一ID的所有观测行都会携带自身的基线预测值 mutate(pred_t1 = predictor[timepoint == 1]) %>% ungroup() %>% # 剔除没有基线数据的受试者,这类样本无法纳入分析 filter(!is.na(pred_t1))
2. 模型构建
注意:纵向数据中同一受试者的多次观测存在相关性,普通GAM未考虑这种聚集性会导致标准误估计偏差,因此必须加入受试者随机效应项。
如果你要沿用你理想的非线性效应假设写法,直接使用以下代码即可:
model1 <- gam(outcome ~ s(pred_t1, k=4) + s(ID, bs = "re"), data = df_processed, method = "ML") # 查看结果 summary(model1)
如果需要验证基线预测变量是否能预测outcome随时间的变化趋势(即不同基线得分的人随时间的变化幅度存在差异),可以加入交互项:
# 线性时间交互模型 model2 <- gam(outcome ~ pred_t1 * timepoint + s(ID, bs = "re"), data = df_processed, method = "ML") summary(model2) # 如果假设时间效应是非线性的,可以用平滑交互项 model3 <- gam(outcome ~ s(timepoint, k=3, by = pred_t1) + s(ID, bs = "re"), data = df_processed, method = "ML") summary(model3)
3. 结果解读
- 若
s(pred_t1)或者pred_t1项的p值显著,说明基线预测变量可以显著预测各波次的outcome水平 - 若
pred_t1:timepoint交互项的p值显著,说明基线预测变量可以显著预测outcome随时间的变化幅度 - 你的非平衡数据不需要额外处理,mgcv默认支持该类数据结构,只要数据缺失符合随机缺失假设即可
内容的提问来源于stack exchange,提问作者MervS
相关产品推荐
相关产品推荐

