DAY4-肝癌的生存分析3

DAY2-用TCGAbiolinks下载肝癌数据并做预处理1
DAY2-用TCGAbiolinks做生存分析2
正值春天,本该是踏青游玩的时刻,半个月来却阴雨连绵。今天终于见到了太阳,心情都变得愉悦了。今天继续接着上次做失败的生存分析,并打算学一学批量做生存分析。

# 先读取基因表达矩阵
setwd("E:\\MATH")
dataFilt_LIHC_final = read.csv("TCGA_LIHC_final.csv",row.names = 1,check.names=FALSE)
# 提取特定基因在癌症样本中的表达,选出的样本都是肿瘤样本
library(TCGAbiolinks)
samplesTP <- TCGAquery_SampleTypes(colnames(dataFilt_LIHC_final), typesample = c("TP"))
ABCB1 <- dataFilt_LIHC_final[c("ABCB1"),samplesTP]

## 修改样本名称(原是TCGA-DD-AAD5-01A-11R-A41C-07),但是clin.LIHC数据中的样本名称是12位,因为后期要把 clin.LIHC 数据和表达数据结合起来,需要将名字简化成TCGA-DD-AAD5
names(ABCB1) <- sapply(strsplit(names(ABCB1),'-'),function(x) paste0(x[1:3],collapse="-"))
#转置
ABCB1 <- t(ABCB1)
ABCB1.png

合并ABCB1基因与临床数据

# 合并ABCB1基因与临床数据
clin.LIHC <- GDCquery_clinic("TCGA-LIHC", "clinical")#重新下载临床数据
save(clin.LIHC,file = "clin.LIHC.Rdata")
load('clin.LIHC.Rdata')
clin.LIHC$"ABCB1" <- ABCB1[match(clin.LIHC$submitter_id,rownames(ABCB1)),]

df<-subset(clin.LIHC,select =c(submitter_id,vital_status,days_to_death,days_to_last_follow_up,ABCB1))
#去掉 NA
df <- df[!is.na(df$ABCB1),]
#根据ABCB1基因的表达情况进行分组,取基因的平均值,大于平均值的为H,小于为L
df$exp <- ''
df[df$ABCB1 >= mean(df$ABCB1),]$exp <- "H"
df[df$ABCB1 < mean(df$ABCB1),]$exp <- "L"

下面是df和最终版df


df.png

最终的df.png

接下来分别用 TCGAanalyze_survival 函数和survival、survminer包进行生存分析,两者做比较。
首先使用TCGAanalyze_survival 函数进行单个基因表达情况对患者生存的影响。这个函数需要三个生存数据:患者的生存状态、死亡时间、随访时间。当存在失访的情况,就按照最后一次随访的时间来计算。

#用 TCGAanalyze_survival 函数进行生存分析
TCGAanalyze_survival(df,
                     clusterCol="exp",
                     risk.table = FALSE,
                     conf.int = FALSE,
                     color = c("Dark2"))
图1.png

用 survival、survminer这两个包来进行生存分析.用status表示患者结局,1表示删失,2表示死亡。和使用TCGAanalyze_survival 函数不同的是,使用 survival 包来进行生存分析时,我们需要将 days_to_death 和 days_ to_last_follow_up 合并为一列。一般来说days_to_death 是空缺的, days_ to_last_follow_up 就会有数据,反之亦然,但是对比发现也有两列同时都有数据的,所以合并在一起是不是稍微有一点不妥呢?

df2 <- df
# 将status表示患者结局,1表示删失,2表示死亡
df2[df2$vital_status=='Dead',]$vital_status <- 2
df2[df2$vital_status=='Alive',]$vital_status <- 1
df2$vital_status <- as.numeric(df2$vital_status)

#将 days_to_death 和 days_ to_last_follow_up 合并为一列
df2$time <- df2$days_to_death
df2$time[which(is.na(df2$time))] <- df2$days_to_last_follow_up[which(is.na(df2$time))]
View(df2)
#进行生存分析
library(survival)
library(survminer)
# 建模
fit <- survfit(Surv(time, vital_status)~exp, data=df2) # 根据表达建模
# 显示P value
surv_pvalue(fit)$pval.txt
# 画图
ggsurvplot(fit,pval=TRUE)
#改版
ggsurvplot(
  fit,                     # survfit object with calculated statistics.
  data = df2,             # data used to fit survival curves.
  risk.table = TRUE,       # show risk table.
  pval = TRUE,             # show p-value of log-rank test.
  conf.int = TRUE,         # show confidence intervals for point estimates of survival curves.
  
  # survival estimates.
  xlab = "Time",   # customize X axis label.
  ggtheme = theme_light(), # customize plot and risk table with a theme.
  risk.table.y.text.col = T,# colour risk table text annotations.
  risk.table.height = 0.25, # the height of the risk table
  risk.table.y.text = FALSE,# show bars instead of names in text annotations in legend of risk table.
  ncensor.plot = TRUE,      # plot the number of censored subjects at time t
  ncensor.plot.height = 0.25,
  conf.int.style = "ribbon",  # customize style of confidence intervals
  surv.median.line = "hv",  # add the median survival pointer.
)
df2.png

图2.png

改版后的图是不是更好看一些呢,最上面是生存曲线,配色都配好的,p值也标注好了,半数生存的时候对应的时间也标好了,95%置信区间也有了。中间一个表格是对应不同生存时间的患者数量,很直观的比较不同组别之间差异。下面一张图是不同分组的截断数据的数量,柱状图,简单明了。


改版.png

有时候会在某一句代码那里卡住,需要琢磨很多天,或许在某一瞬间突然又可以做下去了,真是神奇。
参考:

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

推荐阅读更多精彩内容