公众号-科研私家菜学习记录(6)

生存分析

K-M分析

  • 定义:KM分析即乘积极限法(product-limit method),是现在生存分析最常用的方法。是由Kaplan和Meier于1958年提出,因此称Kaplan-Meier法,简称KM法。KM法这样估计生存曲线:首先计算出活过一定时期的病人再活过下一时期的概率(即生存概率),然后将逐个生存概率相乘,即为相应时段的生存率。
  • R包实现:survival和survminer是其中最常用的两个包,其中survival负责分析,survimner负责可视化。survival提供了Surv对象survfit()函数用于进行KM生存分析;survminer提供了ggsurvplot()函数**用于KM生存分析结果的可视化。根据性别这个二分类变量,采用KM算法来估计生存曲线
  • 示例
library("survival")
library("survminer")
#载入并查看数据集
data("lung")
attach(lung)
fit <- survfit(Surv(time, status) ~ sex, data = lung)
## 作图
ggsurvplot(fit,
           pval = TRUE, # 在图上添加log rank检验的p值
           conf.int = TRUE,# 添加置信区间
           risk.table = TRUE, # 在图下方添加风险表
           risk.table.col = "strata", # 根据数据分组为风险表添加颜色
           linetype = "strata", # 改变不同组别的生存曲线的线型
           surv.median.line = "hv", # 标注出中位生存时间
           ggtheme = theme_bw(), # 改变图形风格
           palette = c("#E7B800", "#2E9FDF")) # 图形颜色风格

Log-rank检验

  • 两组或多组生存曲线进行比较时,常用的假设检验方法是对数秩检验(log-rank test ) : Log-rank又称时序检验,属于非参数检验,用于比较两组或多组生存曲线或生存时间是否相同,检验统计量为卡方。(注意:这里的 log 表示 count、register 或 record,与对数毫无关系,也称为时序检验/对数秩检验)
  • 应用: 检验两条或多条生存曲线的发病率是否相同。与普通卡方检验不同之处是:log-rank 检验能充分利用生存时间(包括删失数据),而且能对各组的生存曲线作整体比较。log-rank 检验是比较两条或多条生存曲线的非参数方法,属于单因素分析方法
  • 应用条件:除比较因素外,影响生存率的各协变量组间均衡可比。如果需要调整协变量或同时分析众多因素对生存结局和生存时间的影响,应采用 Cox 比例风险回归模型
  • R代码示例
## log-rank test
survdiff(Surv(time, status) ~ sex, data = lung)

## add p-value in fig
ggsurvplot(fit,pval = TRUE)

# 提取(Log-rank)检验的P值

sd = survdiff(Surv(time, status) ~ sex, data = lung)
1 - pchisq(sd$chisq, length(sd$n) - 1)
# 估测在某一段时间内的生存概率
summary(survfit(Surv(time, status) ~ sex, data = lung), times = 180)

Cox比例风险模型

  • Cox 比例风险模型(cox proportional-hazards model)简称Cox 模型,是英国统计学家 D.R.Cox(1972)提出的一种半参数回归模型,可以用来预测一个或多个不同变量在某一时间对死亡率的影响。它同时适用于数值变量和类别变量,可以同时评估几种风险因素对生存时间的影响,检验特定因素如何影响特定时间点特定事件(例如,感染,死亡)的发生率。
  • Cox比例风险模型以生存结局生存时间为应变量,可同时分析众多因素对生存期的影响,能分析带有截尾生存时间(又称删失值或终检值。生存时间观察过程的截止不是由于死亡事件,而是由于其他原因引起的,称为截尾)的资料,且不要求估计资料的生存分布类型。
  • Cox模型是根据多种特征(即协变量xi),在一个随时间变化的基准风险函数基础上建立的多元线性回归模型,可以用来评估具有特定特征值的患者在某一时刻的瞬时风险概率。
  • COX比例风险回归模型(Proportional hazards model)常用于多因素生存分析,探索影响多因素对生存期的影响。该模型是一种半参数回归模型,对数据分布要求较低。
  • R示例
library("survival")
library("survminer")
data("lung")
head(lung)

# 单变量Cox分析可以如下计算:
res.cox <- coxph(Surv(time, status) ~ sex, data = lung)
res.cox

summary(res.cox)

# 要将单变量coxph函数一次应用于多个协变量,请输入以下命令:

covariates <- c("age", "sex",  "ph.karno", "ph.ecog", "wt.loss")
univ_formulas <- sapply(covariates,
function(x) as.formula(paste('Surv(time, status)~', x)))
univ_models <- lapply( univ_formulas, function(x){coxph(x, data = lung)})

## 提取数据,并制作数据表格
univ_results <- lapply(univ_models,
function(x){
x <- summary(x)
p.value<-signif(x$wald["pvalue"], digits=2)
wald.test<-signif(x$wald["test"], digits=2)
beta<-signif(x$coef[1], digits=2);#coeficient beta
HR <-signif(x$coef[2], digits=2);#exp(beta)
HR.confint.lower <- signif(x$conf.int[,"lower .95"], 2)
HR.confint.upper <- signif(x$conf.int[,"upper .95"],2)
HR <- paste0(HR, " (",
HR.confint.lower, "-", HR.confint.upper, ")")
res<-c(beta, HR, wald.test, p.value)
names(res)<-c("beta", "HR (95% CI for HR)", "wald.test",
"p.value")
return(res)
#return(exp(cbind(coef(x),confint(x))))
})
res <- t(as.data.frame(univ_results, check.names = FALSE))
as.data.frame(res)
  • COX 模型结果整理
## cox regression
coxph(Surv(time, status) ~ sex, data = lung)

# 变成表格形式
coxph(Surv(time, status) ~ sex, data = lung) %>% 
  gtsummary::tbl_regression(exp = TRUE)

# 风险比:HR = exp(β)


## cox regression
f4<-coxph(Surv(days,status==1)~sex)
summary(f4)
#summary(coxph(Surv(days,status==1)~sex))
f5<-coxph(Surv(days,status==1)~sex+log(thick)+ulc)
summary(f5)
#summary(coxph(Surv(days,status==1)~sex+log(thick)+strata(ulc)))
plot(survfit(coxph(Surv(days,status==1)~
                     log(thick)+sex+ulc)),col=c("red","blue"))
#plot(survfit(coxph(Surv(days,status==1)~
                       #log(thick)+sex+strata(ulc))),col=c("red","blue"))
legend(locator(n=1),legend=c("ulceration present","ulceration absent"),lty=1,col=c("red","blue"))

竞争风险

  • 定义:竞争风险是指在观察队列中,存在某种已知事件可能会影响另一事件发生的概率或者完全阻碍其发生,则可认为前者与后者存在竞争风险。竞争风险属于临床研究关注的临床结局(称之为兴趣终点)之外的另外一个结局,竞争风险的发生率与兴趣终点相等,甚至高于兴趣终点,同时它可以影响兴趣终点的发生的可能性。因此,竞争风险有三个属性,A,不是兴趣终点;B,临床常见;C,与兴趣终点的发生不相互独立。三者同时具备才能称之为竞争风险。

  • 当存在竞争事件时,传统的做法,通常是将竞争事件的发生视作刪失,来计算结局事件的生存概率。如果采用cox模型分析,会导致结局事件的生存概率估计有偏差,一般会高估累计风险发生率,因此在存在竞争风险时,我们优先使用竞争风险模型。

  • 竞争风险的单因素分析常用来估计关心终点事件的发生率,多因素分析常用来探索预后影响因素及效应值

  • 竞争风险模型包括单因素和多因素的分析:

  1. 单因素竞争风险模型 (Single-factor competition risk model):估计目标事件与竞争事件的累积发生率;组间比较时采用 Gray检验。仅考虑单个事件时,类似经典生存分析的Kaplan-Meier 法估计事件的累积发生率。
  2. 多因素竞争风险模型 (Multi-factor competitive risk model): 多因素分析时,运用Fine-Gray模型探讨影响目标事件累积发生率的因素。类似经典COX模型探讨影响目标事件累积发生率的因素。
  • 竞争风险模型适用于多个终点的生存数据。其单因素分析常为估计关心终点发生率(对应生存分析中常用Kaplan-Meier边际回归法(KM法)估计死亡率),多因素分析常为估计预后影响因素及效应值(对应生存分析中常用cox比例风险模型中估计死亡影响因素及效应)。
  • R中竞争风险

##fine-gray test
#library(foreign)
bmt <-read.csv('./ch07/bmtcrr.csv')
head(bmt)
bmt$D <- as.factor(bmt$D)
# install.packages("cmprsk")
library(survival)
library(cmprsk)
library(splines)

attach(bmt)
crmod <- cuminc(ftime,Status,D)
crmod

plot(crmod,xlab = 'Month', ylab = 'CIF',lwd=2,lty=1,
     col = c('red','blue','black','forestgreen'))

##cmprsk model
cov1 <- data.frame(age = bmt$Age,
                   sex_F = ifelse(bmt$Sex=='F',1,0),
                   dis_AML = ifelse(bmt$D=='AML',1,0),
                   phase_cr1 = ifelse(bmt$Phase=='CR1',1,0),
                   phase_cr2 = ifelse(bmt$Phase=='CR2',1,0),
                   phase_cr3 = ifelse(bmt$Phase=='CR3',1,0),
                   source_PB = ifelse(bmt$Source=='PB',1,0)) ## 手动设置哑变量

cov1

mod1 <- crr(bmt$ftime, bmt$Status, cov1, failcode=1, cencode=0)
summary(mod1)
# install.packages("aod")
library(aod)
wald.test(mod1$var,mod1$coef,Terms = 4:6)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容