五、生存分析前的數(shù)據(jù)整理

生存分析只需要tumor數(shù)據(jù),不要normal,將其去掉,新表達(dá)矩陣數(shù)據(jù)命名為exprSet;GTEX可得到正常樣本做補(bǔ)充(xena將GTEX和TCGA數(shù)據(jù)對(duì)應(yīng)起來(lái)了)

clinical信息需要進(jìn)一步整理,成為生存分析需要的格式,新臨床信息數(shù)據(jù)命名為meta。

由于不同癌癥的臨床信息表格組織形式不同,這里的代碼需要根據(jù)實(shí)際情況修改。

rm(list=ls())
options(stringsAsFactors = F)
load("TCGA-CHOL_gdc.Rdata")
library(stringr)

1.簡(jiǎn)化臨床信息,選出要用的列

tmp = data.frame(colnames(clinical))#將clinical的列名組成一個(gè)數(shù)據(jù)框,以便于在閱覽視圖中找到它并復(fù)制
clinical = clinical[,c(
  'bcr_patient_barcode',
  'vital_status',
  'days_to_death',
  'days_to_last_followup',
  'race_list',
  'days_to_birth',
  'gender' ,
  'stage_event'
)]#只選關(guān)心的列

#其實(shí)days_to_last_followup應(yīng)該是找age_at_initial_pathologic_diagnosis,這表格里沒(méi)有,用days_to_birth計(jì)算一下年齡,暫且替代。
dim(clinical)
#> [1] 48  8
#rownames(clinical) <- NULL
rownames(clinical) <- clinical$bcr_patient_barcode#將clinical行名改為病人ID
clinical[1:4,1:4]
#>              bcr_patient_barcode vital_status days_to_death
#> TCGA-W5-AA2Q        TCGA-W5-AA2Q        Alive              
#> TCGA-W5-AA2O        TCGA-W5-AA2O         Dead           640
#> TCGA-W5-AA39        TCGA-W5-AA39         Dead           170
#> TCGA-W6-AA0S        TCGA-W6-AA0S        Alive              
#>              days_to_last_followup
#> TCGA-W5-AA2Q                    50
#> TCGA-W5-AA2O                      
#> TCGA-W5-AA39                      
#> TCGA-W6-AA0S                   352

meta = clinical
exprSet=exp[,Group=='tumor']#生存分析不需要正常樣本
exprSet = log2(edgeR::cpm(exprSet)+1)#取cpm,后面用cpm來(lái)做生存分析

#簡(jiǎn)化meta的列名
colnames(meta)=c('ID','event','death','last_followup','race','age','gender','stage')

#空著的值改為NA
meta[meta==""]=NA

2.實(shí)現(xiàn)表達(dá)矩陣與臨床信息的匹配

有的病人會(huì)有兩個(gè)或兩個(gè)以上的腫瘤樣本,就有重復(fù)。兩種可行的辦法:

(1)以病人為中心,對(duì)表達(dá)矩陣的列按照病人ID去重復(fù),每個(gè)病人只保留一個(gè)樣本。(本文檔)

(2)以樣本為中心,把meta里的病人ID替換成樣本ID,這樣同一個(gè)病人的兩個(gè)樣本就會(huì)有兩行完全一致的臨床信息。(在zz.R中)

# 以病人為中心,表達(dá)矩陣按病人ID去重復(fù)
k = !duplicated(str_sub(colnames(exprSet),1,12));table(k)
#> k
#> TRUE 
#>   36
exprSet = exprSet[,k]#按邏輯值不重復(fù)的取一下

#調(diào)整meta的ID順序與exprSet列名一致
meta=meta[match(str_sub(colnames(exprSet),1,12),meta$ID),]
identical(meta$ID,str_sub(colnames(exprSet),1,12))
#> [1] TRUE

3.整理生存分析的輸入數(shù)據(jù)

#1.1由隨訪(fǎng)時(shí)間和死亡時(shí)間計(jì)算生存時(shí)間(月)(自己考慮生存月份特別少的數(shù)據(jù)是否要去掉)
meta$time = ifelse(meta$event=="Alive",
                   meta$last_followup,
                   meta$death)
meta$time = as.numeric(meta$time)/30

#1.2 根據(jù)生死定義event,活著是0,死的是1
meta$event=ifelse(meta$event=='Alive',
                  0,
                  1)#注意Alive的大小寫(xiě)
table(meta$event)
#> 
#>  0  1 
#> 20 16

#1.3 年齡和年齡分組
meta$age=ceiling(abs(as.numeric(meta$age))/365)#ceiling向上取整

meta$age_group=ifelse(meta$age>median(meta$age,na.rm = T),'older','younger')#看是否大于中位數(shù)判斷是older還是younger
table(meta$age_group)
#> 
#>   older younger 
#>      18      18

#1.4 stage 
library(stringr) 
head(meta$stage)#版本不同,嚴(yán)謹(jǐn)?shù)奶崛》制跁r(shí)應(yīng)該按照TNM(T3N0M1部分)一個(gè)個(gè)的找
#> [1] "6thStage IVT3N0M1"  "7thStage IIIT3N0M0" "7thStage IIT2bNXMX"
#> [4] "7thStage IT1N0M0"   "7thStage IIT2N0M0"  "7thStage IT1N0M0"

a = str_extract_all(meta$stage,"I|V");head(a)
#> [[1]]
#> [1] "I" "V"
#> 
#> [[2]]
#> [1] "I" "I" "I"
#> 
#> [[3]]
#> [1] "I" "I"
#> 
#> [[4]]
#> [1] "I"
#> 
#> [[5]]
#> [1] "I" "I"
#> 
#> [[6]]
#> [1] "I"
b = sapply(a,paste,collapse = "");head(b)
#> [1] "IV"  "III" "II"  "I"   "II"  "I"
meta$stage = b
table(meta$stage)

#1.5 race
table(meta$race)
#> 
#>                     ASIAN BLACK OR AFRICAN AMERICAN                     WHITE 
#>                         3                         2                        31
save(meta,exprSet,cancer_type,file = paste0(cancer_type,"_sur_model.Rdata"))

*生信技能樹(shù)課程筆記

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容