[Unity学习教程] R语言实现非等比例风险生存资料分析(1)

[复制链接]
查看809 | 回复0 | 2023-8-23 12:09:02 | 显示全部楼层 |阅读模式 来自 中国北京
  1. #非等比例风险的生存资料分析
  2. ###1 生成模拟数据###
  3. library(flexsurv)
  4. set.seed(123)
  5. # 生成样本数量
  6. n <- 100
  7. # 生成时间数据
  8. time <- sample(1:1000,n,replace=F)  # 调整shape和scale参数以控制生存曲线形状
  9. # 生成事件数据(假设按比例风险模型)
  10. status <- rbinom(n, size = 1, prob = plogis(-0.5 + 0.01 * time))
  11. # 生成一些协变量数据
  12. covariate1 <- sample(c(0,1,100),n,replace=T)
  13. covariate2 <- rbinom(n, size = 3, prob = 0.5)
  14. group<-sample(c(0,1),n,replace=T)
  15. # 创建生存数据框
  16. survival_data <-data.frame(time,status,covariate1,covariate2,group)
  17. ###2 绘制KM曲线###
  18. library(survminer)
  19. library(survival)
  20. library(ggplot2)
  21. fit<-survfit(Surv(time,status) ~group,data=survival_data)
  22. ggsurvplot(fit,title="图1")
  23. ###3 检验等比例风险###
  24. #观察图片
  25. plot(fit,fun='cloglog',col=c("red","green"),xlab="生存时间对数",ylab="二次对数生存率")
  26. #残差法
  27. coxfit<-coxph(Surv(time,status) ~group,data=survival_data)
  28. zph<-cox.zph(coxfit,transform = "km")
  29. ggcoxzph(zph,title="图2")#不满足等比例风险
  30. cox.zph(coxfit,transform = "rank")
  31. cox.zph(coxfit,transform = "identity")
  32. ###4 two-stage 组间差异比较###
  33. library(TSHRC)
  34. twostage(time,
  35.          status,group,
  36.          nboot=1000)#仅可以说明组间存在差异
  37. #LRPV:log-rank检验;MTPV第二阶段检验;TSPV:两阶段检验结果
  38. #install.packages("ComparisonSurv")
  39. library(ComparisonSurv)
  40. help(package="ComparisonSurv")
  41. Overall.test(time,status,group)#包含two-stage在内的9种方法
  42. ###5 比较大小###
  43. # 找出交叉点对应的时间
  44. crosspoint(time,status,group)#768/774/775/999
  45. #使用ComparisonSurv中的长期和短期比较
  46. Long.test(time,status,group,t0=775)
  47. Short.test(time,status,group,t0=775)
  48. #RMST法:限制平均生存时间
  49. #使用surv2sampleComp
  50. library(surv2sampleComp)
  51. help(package="surv2sampleComp")
  52. sur1<-surv2sample(time,status,group,tau_start=0,tau=775,procedure="KM")
  53. max(time);min(time)
  54. sur2<-surv2sample(time,status,group,tau_start=775,tau=938,procedure="KM")#tau为两组中最长观测值的最小值
  55. #使用survRM2
  56. library(survRM2)
  57. help(package="survRM2")
  58. sur3<-rmst2(survival_data$time,
  59.       survival_data$status, arm=survival_data$group,
  60.       tau = 755, alpha = 0.05)
  61. plot(sur3)
  62. #landmark方法
  63. dat1<-survival_data[survival_data$time<775,]
  64. pzg<-coxph(Surv(time,status) ~group,data=dat1) %>% summary
  65. pz<-pzg[["coefficients"]][1,5]
  66. hr<-pzg[["coefficients"]][1,1]
  67. dat2<-survival_data[survival_data$time>=775,]
  68. pzg2<-coxph(Surv(time,status) ~group,data=dat2) %>% summary
  69. pz2<-pzg2[["coefficients"]][1,5]
  70. hr2<-pzg2[["coefficients"]][1,1]
  71. duan_1<-survfit(Surv(time,status)~group,dat1)
  72. duan_2<-survfit(Surv(time,status)~group,dat2)
  73. #绘图
  74. plot(duan_1, lty = c('solid', 'dashed'), col = c('red', 'blue'), xlim = c(0, 1000), xlab = "生存时间(天)", ylab = '累计生存率', axes = FALSE, lwd = 2)
  75. text(695, 1.0, paste('P=',round(pz,3)))
  76. text(695, 0.8, paste('HR=',round(hr,3)))
  77. axis(1)
  78. axis(2)
  79. axis(4)
  80. duan2a <- survfit(Surv(dat2$time, dat2$status == "1") ~ dat2$group, subset = (dat2$group == 1))
  81. duan2b <- survfit(Surv(dat2$time, dat2$status == "1") ~ dat2$group, subset = (dat2$group == 0))
  82. lines(c(775, duan2b$time), c(1, duan2b$surv), type = "s", lty = 'solid', lwd = 2, col = 'red')
  83. lines(c(775, duan2a$time), c(1, duan2a$surv), type = "s", lty = 'dashed', lwd = 2, col = 'blue')
  84. text(940, 1.0, paste('P<0.01'))
  85. text(940, 0.8, paste('HR=',round(hr2,3)))
  86. abline(v =775, lty = 2, col = "darkgreen", lwd = 3)
复制代码

 
 
 
 

来源:https://blog.csdn.net/weixin_49320263/article/details/132323890
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则