今天我们仍以如下示例数据为例,探讨一下R语言生存曲线的画法。
我们先在RStudio中打开示例数据
我们先在RStudio中打开示例数据
#加载所需要的包library(survival)library("ggplot2")
library("ggpubr")
library("survminer")
library("openxlsx")
library("survminer")
#我们先在桌面创建一个生存分析的文件夹,载入生存分析、画图、读取Excel数据的包。
data <- read.xlsx("C:\\Users\\L\\Desktop\\示例数据.xlsx")
f0 <- survfit(Surv(时间,否结局) ~ 指标8,data = data)
#打开数据,并将此次生存分析赋值给fit
summary(f0)
#对此次分析结果建立表格查看(如下图:)
#然后我们可以用plot()函数将此次生存分析曲线画出来:
plot(f0,xlab = "时间", ylab = "生存概率", main = "生存曲线")
可以看到比较单调,我们并没有对颜色等进行规定,因此也不显示。
那么下边是今天的主角1:ggsurvplot()函数。
ggsurvplot(f0,data=data, size = 1, # 改变曲线的尺寸
linetype ='strata', # 改变曲线的类型
break.time.by = 10, # 更改x轴的时间间隔
palette = c("RED","BLUE"), # 自定义调色板
conf.int = TRUE, # 添加置信区间
pval = TRUE # 添加p值
)
通过上述语句及注释,我们可以看到如下图所示的生存曲线。
Cox模型,也称为Cox回归模型或比例风险模型(Proportional Hazards Model),是由英国统计学家David Cox于1972年提出的一种半参数回归模型。该模型主要用于生存分析,能够同时分析多个风险因素对生存时间的影响,适用于医学随访研究和其他需要分析生存数据的领域。
基本概念和原理
Cox模型的基本形式为:
[ h(t) = h_0(t) \exp(\beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p) ]
其中,( h(t) ) 表示在时间 ( t ) 的危险率函数,( h_0(t) ) 是基准危险率函数,( \beta_1, \beta_2, ..., \beta_p ) 是偏回归系数,( x_1, x_2, ..., x_p ) 是自变量。
应用场景和优缺点
Cox模型在医学研究中有广泛的应用,主要用于以下几个方面:
生存分析:研究患者的生存时间及其相关因素。
风险因素分析:确定与特定事件(如死亡、疾病复发)相关的风险因素。
生存率比较:比较不同组群之间的生存率。
预后评估:评估影响患者预后的因素,为治疗决策提供依据。
调整分析:调整其他变量的影响,更准确地评估特定因素对生存时间的影响。
与其他统计模型的比较
与其他统计模型相比,Cox模型具有以下特点:
因变量类型:Cox模型的因变量为生存资料(包含二分类结局变量和连续型生存时间变量),而多重线性回归的因变量为数值型变量,Logistic回归的因变量为分类或顺序型变量。
数据分布要求:Cox模型对数据分布不作要求,而多重线性回归和Logistic回归则要求数据分布分别近似正态分布和二项分布。
允许数据删失:Cox模型允许删失值,而多重线性回归和Logistic回归不允许。
我们今天以示例数据为例,探讨一下拟合COX模型的基本过程。
#cox模型拟合
f1<-coxph(Surv(时间,结局)~指标1,data)
summary(f1)
survfit_result1 <- survfit(f1, data = data)
plot(survfit_result1,xlab = "时间", ylab = "生存概率", main = "生存曲线")
f2<-coxph(Surv(时间,结局)~指标1+指标2,data)
summary(f2)
survfit_result2 <- survfit(f2, data = data)
plot(survfit_result2,xlab = "时间", ylab = "生存概率", main = "生存曲线")
f3<-coxph(Surv(时间,结局)~指标1+指标2+指标3,data)
summary(f3)
survfit_result3 <- survfit(f3, data = data)
plot(survfit_result3,xlab = "时间", ylab = "生存概率", main = "生存曲线")
#比较f1,f2,f3这3个模型决策曲线的区别
newdata<-list(data,data,data)
cox.tcdca(f1,f2,f3,newdata=newdata)
#自定义一个时间
cox.tcdca(f1,f2,f3,newdata=newdata,timepoint = 30)
#分面绘图
cox.tcdca(f1,f1,f1,newdata=newdata,
timepoint=c(20,30,40))
#增加标题
cox.tcdca(f1,f1,f1,newdata=newdata,
timepoint=c(20,30,40),
Splitface=c("20天","30天","40天"))
医学统计数据分析分享交流SPSS、R语言、Python、ArcGis、Geoda、GraphPad、数据分析图表制作等心得。承接数据分析,论文修回,医学统计,空间分析,问卷分析业务。若有投稿和数据分析代做需求,可以直接联系我,谢谢!

