如何在R中绘制经混杂因素校正的折线图并保留原始数据维度
校正混杂因素后保留原始数据维度的折线图绘制方法(R语言ggpubr)
我已掌握用R语言ggpubr包绘制多时间点数据折线图的方法,现需绘制经已知混杂因素校正后的数据集折线图。此前尝试构建线性模型outcome ~ confounder计算残差并绘图,但残差围绕0波动,丢失大量原始数据信息。想找到一种方法,既可以校正一个或多个混杂因素,又能保留结局变量的原始数据维度(比如曾考虑用原始值减去残差,但不确定是否可行)。
我的数据集来自代谢研究,包含葡萄糖耐量试验中血浆代谢物(葡萄糖、氨基酸等)的浓度数据,目标是展示合并脂肪肝(steatosis)人群的代谢物浓度高于无脂肪肝人群。最终需绘制按脂肪肝分组(是/否)、经BMI校正后的甘氨酸(Glycine)折线图,且需先排除数据集中的缺失值,确保校正后的数据合并可行。
示例数据集
set.seed(123) # 生成模拟数据集 main_study_long_T2D <- data.frame( BMI = rep(rnorm(10, mean = 25, sd = 5), 5), Glycine = rep(seq(50, 80, length.out = 10), 5) + ifelse(rep(c("yes", "no"), each = 5) == "yes", 10, 0) + rnorm(50, sd = 5), steatosis = rep(c("yes", "no"), each = 25), MMT_TIMEPOINT = rep(c(0, 30, 60, 120, 180), times = 10) )
解决方案:计算校正后预测值而非残差
核心思路是通过线性模型生成校正后的预测值,将混杂因素固定在参考水平(如均值),同时保留分组和时间点的效应,这样既去除了混杂因素的干扰,又保留了原始结局变量的量级和维度。
完整代码实现
# 加载依赖包 library(tidyverse) library(ggpubr) # 1. 过滤缺失值(适配实际数据的缺失情况) clean_data <- main_study_long_T2D %>% filter(!is.na(BMI) & !is.na(Glycine)) # 2. 构建包含混杂因素、分组和时间点的线性模型 # 若需校正多个混杂因素,直接在公式中添加(如Glycine ~ BMI + age + gender + steatosis + MMT_TIMEPOINT + steatosis:MMT_TIMEPOINT) model <- lm(Glycine ~ BMI + steatosis + MMT_TIMEPOINT + steatosis:MMT_TIMEPOINT, data = clean_data) # 3. 生成校正后的数据:将BMI固定为样本均值,保留分组和时间点的原始信息 adjusted_data <- clean_data %>% mutate(BMI = mean(BMI, na.rm = TRUE)) %>% # 固定混杂因素BMI为样本均值 mutate(Glycine_adjusted = predict(model, newdata = .)) # 预测校正后的甘氨酸浓度 # 4. 绘制校正后的折线图 ggline(adjusted_data, x = "MMT_TIMEPOINT", y = "Glycine_adjusted", color = "steatosis", add = c("mean_se", "jitter"), add.params = list(alpha = 0.3), palette = "jco") + stat_compare_means(aes(group = steatosis), label = "p.signif", method = "t.test") + labs(y = "甘氨酸浓度(经BMI校正)", x = "时间点(分钟)", color = "脂肪肝")
方法优势
- 校正后的数值保留了原始甘氨酸浓度的量级,能直观反映脂肪肝组与非脂肪肝组的浓度差异,而非残差的无意义波动
- 支持多混杂因素校正:只需在模型公式中添加对应变量,并在生成校正数据时将所有混杂因素固定为参考水平(数值变量用均值,分类变量用参考组)
- 模型中加入
steatosis:MMT_TIMEPOINT交互项,可捕捉两组在不同时间点的差异趋势,更贴合代谢试验的时间动态特征
内容的提问来源于stack exchange,提问作者c_dinosaur
相关产品推荐
相关产品推荐

