在生存分析中,如果咱们研究的是连续变量,咱们有时候需要对连续变量进行一个截断,比较截断的两部分的生存率。比如基因的高表达和低表达对生存率的影响,高龄患者和低龄患者生存率的影响。
然而怎么取这个截断点也是有讲究的,自己截断的话,有可能生存率并无明显差别,P>0.05。
今天咱们通过survminer包来演示怎么对连续变量怎么获取最佳截断值,继续使用我们的乳腺癌数据(公众号回复:乳腺癌,可以获得数据)我们先导入数据和R包library(foreign)
library(survival)
library(survminer)
bc <- read.spss("E:/r//test/Breast cancer survival agec.sav",
use.value.labels=F, to.data.frame=T)
我们先来看看数据:
age表示年龄,pathsize表示病理肿瘤大小(厘米),lnpos表示腋窝淋巴结阳性,histgrad表示病理组织学等级,er表示雌激素受体状态,pr表示孕激素受体状态,status结局事件是否死亡,pathscat表示病理肿瘤大小类别(分组变量),ln_yesno表示是否有淋巴结肿大,time是生存时间,后面的agec是我们自己设定的,不用管它。
假设咱们想研究不同年龄段的乳腺癌对生存率的影响,需要通过一个截点把年龄分成高龄和低龄两个组。
需要使用到survminer 包的surv_cutpoint函数,data填入你的数据,time填入你的时间,event填入结局变量,variables这里填入要分析的变量
res.cut <- surv_cutpoint(data=bc, time = "time", event = "status",
variables = c("age"))
res.cut
我们可以看到截点是44岁这里,可以把大于44岁分成一组和小于44岁分成一组。还可以绘图看下分布。
plot(res.cut, "age", palette = "npg")
Palette这个参数还可以选风格,比如咱们选个柳叶刀风格。此外风格还有"npg", “aaas”, “lancet”, “jco”, “ucscgb”, “uchicago”, “simpsons” and "rickandmorty"等
plot(res.cut, "age", palette = "lancet")
转换年龄这个变量咱们不用手动转换,survminer包提供了函数surv_categorize,可以直接转换。
res.cat <- surv_categorize(res.cut)
head(res.cat)
咱们可以看到,age被函数转成了高和低2组,大于截点44的是高组,小于的就是低组。
咱们用这个转化好的数据来进行K-M分析看看,先建立模型
fit <- survfit(Surv(time, status) ~age, data = res.cat)
绘图
ggsurvplot(fit, data = res.cat, risk.table = TRUE, conf.int = TRUE,pval = T)
由上图可以看出,截断后的高组和低组生存率存在明显差异。