导师:人家隔壁组5行代码就做出了RCS图,你们行不行!

文摘   2024-12-30 09:00   荷兰  

开头先更新一个新的短视频,感兴趣的可以关注公众号的同名视频号“Michael科研代码”。考虑到短视频的传播特点,不仅会更新R,Python教程,还会更新有关“科研代码”宇宙的科研心理学,职业规划等内容。希望通过幽默的手段传播一种科研方式。


好了,接下来让我们进入今天的正题:限制性立方样条教程

前言

限制性立方样条(Restricted Cubic Spline, RCS)是一种强大的统计方法,用于灵活地建模变量之间的非线性关系。通过在数据范围内引入若干节点,RCS能够有效地捕捉变量之间的复杂关系,同时保持模型的解释性。

RCS常被用于流行病学、医学统计、经济学等领域。例如,在流行病学研究中,RCS可用于探索环境暴露量与疾病发生风险之间的非线性关系;在经济学中,它可以帮助分析投资收益随时间的动态变化。

在R语言中,有多种包可以实现RCS分析与绘图,包括splinesrmsplotRCS等。今天的更新将比较这些包的使用体验和可视化效果,展示如何生成符合发表标准的高质量曲线

1. 使用rms包实现RCS曲线

rms包封装了节点选择和模型拟合,减少了部分手动工作,并支持添加置信区间。然而,其默认绘图功能较为基础,需要结合其他工具增强可视化效果。

library(rms)
library(ggplot2)

# 数据生成
set.seed(123)
x <- runif(100, 1, 10)
y <- 2 * log(x) + rnorm(100, sd = 0.5)
dd <- datadist(x)
options(datadist = "dd")

# 模型拟合
fit <- ols(y ~ rcs(x, knots = c(3, 6, 8)))

# 获取预测数据
pred_data <- as.data.frame(Predict(fit, x))

# 绘图
ggplot(pred_data, aes(x = x, y = yhat)) +
geom_line(color = "#D55E00", size = 1.2) +
geom_ribbon(aes(ymin = lower, ymax = upper), fill = "#F0E442", alpha = 0.3) +
labs(
title = "Restricted Cubic Spline Curve",
subtitle = "Using rms package with confidence intervals",
x = "Predictor (X)",
y = "Predicted Response (Y)"
) +
theme_classic() +
theme(
plot.title = element_text(size = 14, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 12, hjust = 0.5),
axis.title = element_text(size = 12),
axis.text = element_text(size = 10),
legend.position = "none"
)

2. 使用plotRCS包实现RCS曲线

plotRCS包为RCS分析与绘图提供了一站式解决方案。只需5行代码即可完成曲线绘制,其默认图形风格美观大方,适合直接用于学术报告和论文发表。原作者是Rongrui Huo,大家可以在其Github主页看到更完整的教程:https://github.com/KunHuo/plotRCS

library(plotRCS)

# View data
head(cancer)

## id age sex race size metastasis status time
## 1 10274 53 Male White 27 No Censored 12
## 2 56998 32 Male Black 185 No Dead 5
## 3 60010 69 Male White 51 No Dead 13
## 4 24307 61 Male White 37 No Censored 50
## 5 5253 53 Female White 25 No Censored 27
## 6 39685 56 Male Other 38 No Censored 17

# RCS curves for a liear regression model
rcsplot(data = cancer,
outcome = "size",
exposure = "age",
covariates = c("sex", "race", "metastasis"))

##
## Figure: Association Between age and size Using a Restricted Cubic Spline Regression Model.
## Graphs show β for size according to age adjusted for sex, race, metastasis. Data were fitted by a linear regression model, and the model was conducted with 4 knots at the 5th, 35th, 65th, 95th percentiles of age (reference is the 5th percentile). Solid lines indicate β, and shadow shape indicate 95% CIs. CI, confidence interval.

小结

在本文的比较中,我们发现:rms封装了建模与预测过程,但默认绘图能力较弱,仍需额外的美化处理。plotRCS以其代码的简洁性和绘图的优雅性脱颖而出。它集成了RCS建模与高质量可视化,是快速生成专业图形的首选工具。

特别感谢plotRCS包的作者为R语言用户提供了如此高效的工具。通过该包,很多同学可用极低的学习成本生成符合期刊风格的图形,极大地增强了科研效率。

感谢关注,你的支持是我不懈的动力!

科研代码
专注R和Python的数据分析。
 最新文章