library(foreign)# 作用:读取外部数据文件,特别是SPSS格式文件
library(rms)# 作用:提供高级回归建模功能,包括限制性立方样条分析
library(ggplot2) # 作用:创建高质量数据可视化图形
第二部分:数据导入与清理
# 读取SPSS格式的乳腺癌生存数据文件
bc <- read.spss("Breast cancer survival agec.sav",# 文件名use.value.labels=F, # 参数:不将SPSS中的值标签转为因子,保持数值格式
to.data.frame=T)# 参数:将数据转换为R的数据框格式
bc <- na.omit(bc)# 作用:删除数据中所有含有缺失值(NA)的行
#影响:确保后续分析基于完整数据,避免缺失值导致的错误
head(bc)# 作用:显示数据框的前6行,用于快速查看数据结构
第三部分:数据子集创建与变量处理
# 这行代码假设已运行过attach(bc),实际上这里有问题,应该改为:# be <- data.frame(age = bc$age, status = bc$status, ln_yesno = bc$ln_yesno)
be <- data.frame(age, status, ln_yesno)# 作用:从原始数据中提取三个关键变量,创建新的分析数据框
be$ln_yesno <- as.factor(be$ln_yesno)# 作用:将ln_yesno变量转换为因子类型# 意义:告诉R这是一个分类变量(不是连续变量),在回归分析中会创建哑变量
第四部分:为rms包设置数据环境
dd <- datadist(be)# 作用:计算并存储数据集中所有变量的分布摘要信息
# 包括:中位数、四分位数、范围等
# 这是rms包特有的数据准备步骤
options(datadist='dd') # 作用:设置全局选项,指定使用dd作为数据分布对象
#影响:后续所有rms包的函数都会自动使用这个数据分布信息
第五部分:建立逻辑回归模型
fit <- lrm(status ~ rcs(age,4)+ ln_yesno, data=be)# lrm: 逻辑回归模型函数,用于二元结局变量# ~: 公式符号,左边是因变量,右边是自变量# rcs(age,4): 对age变量使用4个节点的限制性立方样条#- 意义:允许年龄与结局之间呈现非线性关系#- 4个节点:在age的分布范围内选择4个点作为样条节点#- 实际产生3段三次多项式,在节点处平滑连接# + ln_yesno: 添加另一个自变量到模型中# data=be: 指定使用的数据框
第六部分:设置参考点并更新模型
dd$limits$age[2]<-50# 作用:将age变量的参考点(中位数参考)设置为50岁
# dd$limits$age[1]是下限,[2]是参考点,[3]是上限
# 在OR计算中,50岁将作为比较基准(OR=1)
fit1 = update(fit)# 作用:重新拟合模型,应用新的参考点设置
# 实际上这里fit1并没有被使用,可以直接用原模型fit
第七部分:生成预测值
OR <- Predict(fit,# 使用拟合好的模型
age,# 对age变量进行预测
fun=exp,# 对预测结果取指数
# 因为逻辑回归输出的是log(odds),exp转换后得到OR
ref.zero=TRUE)# 将参考点处的OR值设为1
# Predict函数返回一个数据框,包含:# - age: 年龄值# - yhat: 预测的OR值(点估计)# - lower: 95%置信区间下限# - upper: 95%置信区间上限

第八部分:绘制限制性立方样条曲线
# 创建空白画布
ggplot()+
# 添加主曲线
geom_line(data=OR,
aes(age, yhat),# x轴=age, y轴=预测的OR值
linetype=1,# 实线
size=1,# 线宽
alpha=0.9,# 透明度
colour="red")+# 红色线条
# 添加置信区间(阴影区域)
geom_ribbon(data=OR,
aes(age, ymin=lower, ymax=upper),# 定义置信区间范围
alpha=0.3,# 较低的透明度
fill="red")+# 红色填充
# 添加水平参考线(OR=1)
geom_hline(yintercept=1,# 在y=1处画线
linetype=2,# 虚线
size=1)+# 线宽
# 设置图形主题
theme_classic()+# 简洁的经典主题(无网格线,白色背景)
# 添加标题和坐标轴标签
labs(title="RCS",# 标题
x="age",# x轴标签
y="OR(95%CI)")# y轴标签:比值比及其95%置信区间

代码的总体目的:
数据准备:从SPSS文件中读取乳腺癌患者数据
模型构建:建立年龄与生存状态的非线性关系模型
结果可视化:直观展示年龄如何影响乳腺癌患者的生存风险
图形解读要点:
曲线趋势:展示年龄与生存风险的非线性关系
置信区间:反映估计的不确定性
参考线:OR=1表示无风险差异
50岁基准:所有OR值都是相对于50岁患者的风险比值