R语言实现非等比例风险生存资料分析(1)

复制代码
#非等比例风险的生存资料分析
###1 生成模拟数据###
library(flexsurv)
set.seed(123)
# 生成样本数量
n <- 100
# 生成时间数据
time <- sample(1:1000,n,replace=F)  # 调整shape和scale参数以控制生存曲线形状
# 生成事件数据(假设按比例风险模型)
status <- rbinom(n, size = 1, prob = plogis(-0.5 + 0.01 * time))
# 生成一些协变量数据
covariate1 <- sample(c(0,1,100),n,replace=T)
covariate2 <- rbinom(n, size = 3, prob = 0.5)
group<-sample(c(0,1),n,replace=T)
# 创建生存数据框
survival_data <-data.frame(time,status,covariate1,covariate2,group)

###2 绘制KM曲线###
library(survminer)
library(survival)
library(ggplot2)
fit<-survfit(Surv(time,status) ~group,data=survival_data)
ggsurvplot(fit,title="图1")

###3 检验等比例风险###
#观察图片
plot(fit,fun='cloglog',col=c("red","green"),xlab="生存时间对数",ylab="二次对数生存率")
#残差法
coxfit<-coxph(Surv(time,status) ~group,data=survival_data)
zph<-cox.zph(coxfit,transform = "km")
ggcoxzph(zph,title="图2")#不满足等比例风险
cox.zph(coxfit,transform = "rank")
cox.zph(coxfit,transform = "identity")

###4 two-stage 组间差异比较###
library(TSHRC)
twostage(time,
         status,group,
         nboot=1000)#仅可以说明组间存在差异
#LRPV:log-rank检验;MTPV第二阶段检验;TSPV:两阶段检验结果
#install.packages("ComparisonSurv")
library(ComparisonSurv)
help(package="ComparisonSurv")
Overall.test(time,status,group)#包含two-stage在内的9种方法

###5 比较大小###
# 找出交叉点对应的时间
crosspoint(time,status,group)#768/774/775/999
#使用ComparisonSurv中的长期和短期比较
Long.test(time,status,group,t0=775)
Short.test(time,status,group,t0=775)
#RMST法:限制平均生存时间
#使用surv2sampleComp
library(surv2sampleComp)
help(package="surv2sampleComp")
sur1<-surv2sample(time,status,group,tau_start=0,tau=775,procedure="KM")
max(time);min(time)
sur2<-surv2sample(time,status,group,tau_start=775,tau=938,procedure="KM")#tau为两组中最长观测值的最小值
#使用survRM2
library(survRM2)
help(package="survRM2")
sur3<-rmst2(survival_data$time, 
      survival_data$status, arm=survival_data$group, 
      tau = 755, alpha = 0.05)
plot(sur3)
#landmark方法
dat1<-survival_data[survival_data$time<775,]
pzg<-coxph(Surv(time,status) ~group,data=dat1) %>% summary
pz<-pzg[["coefficients"]][1,5]
hr<-pzg[["coefficients"]][1,1]
dat2<-survival_data[survival_data$time>=775,]
pzg2<-coxph(Surv(time,status) ~group,data=dat2) %>% summary
pz2<-pzg2[["coefficients"]][1,5]
hr2<-pzg2[["coefficients"]][1,1]
duan_1<-survfit(Surv(time,status)~group,dat1) 
duan_2<-survfit(Surv(time,status)~group,dat2)
#绘图
plot(duan_1, lty = c('solid', 'dashed'), col = c('red', 'blue'), xlim = c(0, 1000), xlab = "生存时间(天)", ylab = '累计生存率', axes = FALSE, lwd = 2)
text(695, 1.0, paste('P=',round(pz,3)))
text(695, 0.8, paste('HR=',round(hr,3)))
axis(1)
axis(2)
axis(4)
duan2a <- survfit(Surv(dat2$time, dat2$status == "1") ~ dat2$group, subset = (dat2$group == 1))
duan2b <- survfit(Surv(dat2$time, dat2$status == "1") ~ dat2$group, subset = (dat2$group == 0))
lines(c(775, duan2b$time), c(1, duan2b$surv), type = "s", lty = 'solid', lwd = 2, col = 'red')
lines(c(775, duan2a$time), c(1, duan2a$surv), type = "s", lty = 'dashed', lwd = 2, col = 'blue')
text(940, 1.0, paste('P<0.01'))
text(940, 0.8, paste('HR=',round(hr2,3)))
abline(v =775, lty = 2, col = "darkgreen", lwd = 3)
相关推荐
babe小鑫7 天前
信息与计算科学专业应届生面试 怎么证明自己能解决业务问题
学习·r语言·excel
深兰科技9 天前
深兰科技受邀参与第二届中国(南宁)—东盟人工智能场景应用对接会,深化AI国际合作
人工智能·qt·r语言·scala·symfony·智能机器人·深兰科技
赵钰老师10 天前
基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析
python·arcgis·数据分析·r语言
User_芊芊君子14 天前
RStudio 鸿蒙 PC 适配全记录:以 Qt 原生工作区承载嵌入式 R
qt·r语言·harmonyos
临床数据科学和人工智能兴趣组14 天前
399元现在超值!学R语言,订阅我们专栏就够了,包括了所有的内容,不断更新!
人工智能·数据挖掘·r语言·r语言-4.2.1·临床研究
babe小鑫14 天前
生物统计学专业校招:SAS、R、Python学习顺序实用指南
python·学习·r语言
大江东去浪淘尽千古风流人物15 天前
【LoMa】局部特征匹配重访:从LoMa-B到旋转不变LoMa-R的架构与工程实践
开发语言·深度学习·计算机视觉·r语言·视觉定位·sfm·局部特征匹配
babe小鑫16 天前
精算学专业秋招:Excel、SQL、R和Python应该先练什么
sql·r语言·excel
海盗123417 天前
微软技术日报 2026-09-10:Project Zenith 开发者设备亮相,.NET 11 RC1 可投产
microsoft·r语言·.net
统计学小王子18 天前
数学建模国赛倒计时1天——《统计模型精讲(岭回归R语言实战篇)》
数学建模·回归·r语言