为RCS曲线添加不同图例

先祝大家新年快乐,新的一年蒸蒸日上,心想事成。近日有粉丝和我说投稿返修,编辑要求要对RCS曲线的可信区间进行标注,即需要把RCS改成下图的形式,
在这里插入图片描述
下面我们通过R语言来演示一下

library(foreign)
library(rms)
be <- read.spss("E:/r/test/ozone.sav",
                use.value.labels=F, to.data.frame=T)  #我的臭氧数据
names(be)

在这里插入图片描述
这里我们使用我们原来的臭氧的数据,主要描述的是臭氧浓度和大气一些相关指标的情况(公众号回复:臭氧,可以获得数据),数据中有七个变量,ozon每日臭氧水平为结局变量,Inversion base height(ibh)反转基准高度,Pressure gradient (mm Hg) 压力梯度(mm Hg),Visibility (miles) 能见度(英里),Temperature (degrees F) 温度(华氏度),Day of the year日期,vh我也不知道是什么,反正就是一参数,这里所有的变量都是连续的。

对数据进行整理

dd <- datadist(be) #为后续程序设定数据环境
options(datadist='dd') #为后续程序设定数据环境

建立模型

fit<-ols(ozon ~rcs(ibh, 4)+temp,data=be)

生成预测值
OR<-Predict(fit, ibh)
我们先对线条颜色和线型进行一个设定

line=c('95%cilower'=2,'Estimation'=1,'95%ciupper'=2)
cols=c('95%cilower'="black", 'Estimation'="black", '95%ciupper'="black")

绘图

ggplot(OR)+
  geom_line(data=OR, aes(ibh,yhat,colour = 'Estimation', linetype = "Estimation"),size=1)+
  geom_line(data=OR, aes(ibh,lower,colour = '95%cilower', linetype = "95%cilower"),size=1)+
  geom_line(data=OR, aes(ibh,upper,colour = '95%ciupper', linetype = "95%ciupper"),size=1)+
  scale_linetype_manual(name="线条说明",values = line)+
  scale_colour_manual(name="线条说明",values=cols)+
  theme_classic()+
  theme(legend.position = c(.8,.8),
        legend.key.width = unit(2,"cm"),panel.grid.major = element_blank(), panel.grid.minor = element_blank())

在这里插入图片描述
这样图就绘制好了,当然也可以通过AI这种修图软件改图。

<think>嗯,用户想了解如何在R语言中绘制限制性立方样条(RCS曲线。我需要先回忆一下RCS的基本概念和应用场景。RCS通常用于评估连续变量与结局之间的非线性关系,常见于医学统计和流行病学中。用户可能是研究人员或数据分析师,希望用RCS来探索变量间的非线性关联。 首先,用户需要安装和载相关的R包。常用的包包括rms和ggplot2。rms包提供了拟合RCS的函数,比如ols用于线性回归,lrm用于logistic回归,而ggplot2则用于绘。我得确保提到安装和载这些包的步骤,可能用户还不熟悉这些包,所以需要详细说明。 接下来,准备数据。用户需要有一个数据集,其中包含要分析的连续自变量、因变量以及其他协变量。例如,假设因变量是二分类的,使用lrm函数拟合logistic回归模型,如果是连续型的,则用ols。这里可能需要提醒用户根据数据类型选择合适的模型。 然后,使用datadist函数指定变量的分布,这对后续的预测和绘很重要。之后,用RCS函数在模型公式中指定自变量的样条项。例如,lrm(y ~ rcs(age, 4) + sex)表示用4个节点对age变量进行RCS拟合,同时控制性别变量。 拟合完模型后,使用Predict函数生成预测值,这包括自变量不同取值下的预测结果及其置信区间。这一步可能会生成一个数据框,包含x值、预测值、下限和上限。 最后,用ggplot2绘制曲线。需要将预测数据传递给ggplot,使用geom_line画主曲线,geom_ribbon添加置信区间,并设置坐标轴标签和标题。可能需要提醒用户调整节点数或检查模型假设。 用户可能的疑问包括如何确定节点数量,通常默认是5个,但也可以根据AIC或领域知识选择。另外,可能需要解释如何解释形中的非线性趋势,以及如何处理模型中的其他协变量。确保步骤清晰,代码示例正确,避免常见错误,比如忘记载rms包或未正确设置datadist。 另外,注意系统级指令中的格式要求,所有数学表达式用$...$,独立公式用$$...$$,但在这个问题中可能涉及较少数学公式,但如果有的话需要注意格式。比如,样条函数的数学表达式可能需要用LaTeX呈现。 最后,检查是否有遗漏步骤,比如数据预处理、模型诊断或结果解释。确保用户能按步骤操作,并理解每个部分的作用。可能还需要推荐进一步的学习资源,如官方文档或相关教程,帮助用户深入理解。</think>在R语言中,绘制限制性立方样条(Restricted Cubic Splines, RCS曲线可通过`rms`包实现,常用于探索连续变量与结局的非线性关系。以下是逐步实现方法: --- ### 一、安装和载包 ```r install.packages("rms") # 包含RCS函数 install.packages("ggplot2") # 绘 library(rms) library(ggplot2) ``` --- ### 二、准备数据 假设数据框为`df`,自变量为`age`,因变量为`y`(二分类变量): ```r # 示例数据(替换为实际数据) set.seed(123) df <- data.frame( age = rnorm(500, 50, 10), y = sample(0:1, 500, replace = TRUE) ) ``` --- ### 三、拟合RCS模型 1. **设置变量分布** ```r dd <- datadist(df) # 定义变量分布 options(datadist = "dd") # 设为全局选项 ``` 2. **构建逻辑回归模型** ```r model <- lrm(y ~ rcs(age, 4), data = df) # 4个节点 ``` --- ### 四、生成预测值 ```r pred <- Predict(model, age = seq(20, 80, by = 1)) # 生成预测数据 # pred包含age、yhat(预测值)、lower(下限)、upper(上限) ``` --- ### 五、绘制RCS曲线 ```r ggplot(pred, aes(x = age, y = yhat)) + geom_line(color = "blue", linewidth = 1) + # 主曲线 geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.2, fill = "skyblue") + # 置信区间 labs(x = "Age", y = "Log Odds", title = "RCS曲线示例") + theme_bw() ``` --- ### 六、关键参数说明 1. **节点数选择** - `rcs(age, 4)`中`4`表示节点数,通常默认5个,可通过AIC选择最优。 - 节点越多,曲线越灵活,但可能过拟合。 2. **模型类型** - 若因变量为连续变量,使用`ols()`替代`lrm()`。 --- ### 七、输出示例 形会显示`age`与对数优势比(log odds)的非线性关系,置信区间为浅蓝色区域。 --- ### 八、注意事项 - **数据预处理**:确保自变量无缺失且已标准化(如必要)。 - **模型诊断**:通过`anova(model)`检验非线性项显著性。 - **结果解读**:拐点位置提示变量关系的转折。 通过以上步骤,可快速绘制RCS曲线并探索连续变量的非线性效应。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值