當使用各種機器學習方法(CoxBoost,Lasso,SuperPC,randomForestSRC,Elastic Net等)完成預后模型后,除了在組學層面( IPS評分,藥物反應預測,WGCNA等)進行一系列的分析外,還可以將定義的風險得分和臨床指標進行比較。如Expression of hub genes of endothelial cells in glioblastoma-A prognostic model for GBM patients integrating single-cell RNA sequencing and bulk RNA sequencing中下圖所示 最初我完成該圖的方法是用含有基因表達的熱圖,然后截圖或者PS成只有臨床指標。這里介紹使用ComplexHeatmap直接完成該圖。 使用前面系列推文的TCGA-SKCM的臨床數(shù)據(jù)和隨訪數(shù)據(jù),以及經(jīng)過lasso模型計算的風險評分結果 。 后臺回復“臨床”既可獲取Expr_phe_cli_riskscore.RData的示例數(shù)據(jù)。 library(tidyverse) library(ComplexHeatmap) library(ggsci) #顏色 library(circlize) #連續(xù)顏色
#載入數(shù)據(jù) load("Expr_phe_cli_riskscore.RData")
riskScore_cli2 <- riskScore_cli %>% inner_join(phe) %>% column_to_rownames("sample") %>% select(- "_PATIENT") head(riskScore_cli2)
只要數(shù)據(jù)框中含有想展示的表型數(shù)據(jù)即可,一般會有風險得分,生存信息以及重要的臨床指標,當然也可以其他重點關注的指標:(1)重點基因突變與否,例如KRAS突變 (2)某個CNV有無(3)TMB ,MSI,IDH等等你想展示的指標。如果添加基因表達量的話那就是正常的熱圖即可。 2,臨床數(shù)據(jù)處理 在TCGA下載的臨床數(shù)據(jù)需要進行一些處理,可以在excel中完成,當然也可以使用R完成。 包括但不限于以下(1)連續(xù)數(shù)值按照某個閾值轉為分類 (2)向量和因子的轉化 (3)將數(shù)據(jù)中的T1a ,T1b,T1 統(tǒng)一為T1期 類似的整理。 (1)和(2)比較簡單,如下 #連續(xù)數(shù)值,按需轉為分類 riskScore_cli2$Age =ifelse(riskScore_cli2$age > 60,">60","<=60")
#字符串轉為因子 riskScore_cli2$OS <- as.factor(riskScore_cli2$OS) riskScore_cli2$tumor_stage <- as.factor(riskScore_cli2$tumor_stage)
(3)可以使用多種方式完成數(shù)據(jù)整理 A :T分期使用直接指定的方法 注意%in% c("T1a","T1b","T1")的向量中要列出所有想轉化的,假設有T1c的話 也需要加上。 table(riskScore_cli2$pathologic_T) # T0 T1 T1a T1b T2 T2a T2b T3 T3a T3b T4 T4a T4b Tis TX # 23 10 21 10 30 32 15 14 39 37 13 26 109 7 44
riskScore_cli2$pathologic_T[riskScore_cli2$pathologic_T %in% c("T1a","T1b","T1")] <- "T1" riskScore_cli2$pathologic_T[riskScore_cli2$pathologic_T %in% c("T2a","T2b","T2")] <- "T2" riskScore_cli2$pathologic_T[riskScore_cli2$pathologic_T %in% c("T3a","T3b","T3")] <- "T3" riskScore_cli2$pathologic_T[riskScore_cli2$pathologic_T %in% c("T4a","T4b","T4")] <- "T4" table(riskScore_cli2$pathologic_T)
B:N分期,使用gsub替換的方式 table(riskScore_cli2$pathologic_N) # N0 N1 N1a N1b N2 N2a N2b N2c N3 NX #226 17 19 37 6 13 21 9 56 34
riskScore_cli2$pathologic_N <- gsub("N1[abc]?", "N1", riskScore_cli2$pathologic_N) riskScore_cli2$pathologic_N <- gsub("^N2.*", "N2", riskScore_cli2$pathologic_N) riskScore_cli2$pathologic_N <- gsub("^N3.*", "N3", riskScore_cli2$pathologic_N)
C:M分期,使用grepl的方法 table(riskScore_cli2$pathologic_M) # M0 M1 M1a M1b M1c #407 5 5 5 9
riskScore_cli2$pathologic_M <- ifelse(grepl("^M1", riskScore_cli2$pathologic_M), "M1", riskScore_cli2$pathologic_M) riskScore_cli2$pathologic_M <- ifelse(grepl("^M0", riskScore_cli2$pathologic_M), "M0", riskScore_cli2$pathologic_M)
D:還可以使用str_replace 或者 str_detect等方法進行轉化,這里示例展示一下,不運行不影響推文的后續(xù)操作 。 riskScore_cli2$pathologic_T2 <- riskScore_cli2$pathologic_T # str_replace riskScore_cli2$pathologic_T2 <- str_replace(riskScore_cli2$pathologic_T2, "T1[a-d-c-d]?", "T1") #str_detect riskScore_cli2$pathologic_T2 <- ifelse(str_detect(riskScore_cli2$pathologic_T2, "^T1"), "T1", riskScore_cli2$pathologic_T2)
以上就完成了本次分析需要的數(shù)據(jù)處理部分。
1,直接繪制
使用ComplexHeatmap繪制臨床數(shù)據(jù)注釋圖 ,重點在于構建一個和臨床數(shù)據(jù)相同列的0矩陣 。 # 提取想展示的臨床數(shù)據(jù) riskScore_cli2 <- riskScore_cli2 %>% select(riskScore:tumor_stage,Age) %>% select(- "age") # 構建列注釋塊 ha=HeatmapAnnotation(df=riskScore_cli2) # 構建zero矩陣 zero_row_mat=matrix(nrow=0, ncol=nrow(riskScore_cli2)) #繪制熱圖 Hm <- Heatmap(zero_row_mat, top_annotation=ha) Hm #調整legend的位置和大小 draw(Hm, merge_legend = TRUE, heatmap_legend_side = "bottom", annotation_legend_side = "bottom", width = unit(16, "cm"), height = unit(1, "cm") )
2,圖形優(yōu)化調整上面可以順利的完成圖形可視化,相較文獻還可以在(1)表型內(nèi)容排序,比如優(yōu)先Score高低排序,然后Stage排序(2)表型注釋的順序,比如先展示Score,然后OS,stage等 和(3)每種表型進行自定義的顏色設置 上進行優(yōu)化和調整。 (1)表型內(nèi)部排序 ,使用arrange 進行排序,可以依次選擇多個指標 riskScore_cli3 <- riskScore_cli2 %>% arrange(riskScore2,OS,tumor_stage,gender,OS.time,Age)
(2)和(3)一起在HeatmapAnnotation注釋中解決,如果為省事未展示T M N分期 ,可以自行添加。 library(circlize) #連續(xù)性變量的顏色設置 col_fun_time <- colorRamp2( c(0, 3000, 11000), #根據(jù)值的范圍設置 c("#DC0000FF", "grey", "#1f78b4") ) # ha <- HeatmapAnnotation( Score = riskScore_cli3$riskScore2, Stage = riskScore_cli3$tumor_stage , OS.Status = riskScore_cli3$OS, OS.Time = riskScore_cli3$OS.time, Gender = riskScore_cli3$gender , Age = riskScore_cli3$Age, col = list( Score = c("High" = "#BC3C29FF", "Low" = "#0072B5FF"), OS.Status = c("0" = "#E18727FF", "1" = "#20854EFF"), #分類 OS.Time = col_fun_time , #連續(xù) Gender = c("female" = "#AB3282", "male" = "#3A6963"), Age = c("<=60" = "#712820", ">60" = "#E4C755"), Stage = c("0" = "#E64B35FF", "1" = "#4DBBD5FF", "2" = "#00A087FF", "3" = "#3C5488FF", "4" = "#DC0000FF", "NA" = "#8491B4FF") ) )
可視化展示 Hm <- Heatmap(zero_row_mat, top_annotation=ha) draw(Hm, merge_legend = TRUE, heatmap_legend_side = "bottom", annotation_legend_side = "bottom", width = unit(16, "cm"), height = unit(1, "cm") )
以上就完成了風險得分和臨床指標的熱圖,拿去發(fā)文章吧。 RNAseq純生信挖掘思路分享?不,主要是送你代碼?。ńㄗh收藏) 覺得對您有點幫助的希望可以點贊,在看,轉發(fā)!
|