如何生成WGCNA分析所需的臨床表型信息

根據(jù)文章生信菜鳥團(tuán):一文學(xué)會(huì)WGCNA分析所講:

WGCNA輸入數(shù)據(jù)的準(zhǔn)備,主要有兩個(gè)數(shù)據(jù)需要提前準(zhǔn)備好:
(1)是表達(dá)矩陣, 如果是芯片數(shù)據(jù),常規(guī)的歸一化矩陣即可。如果是轉(zhuǎn)錄組數(shù)據(jù),最好是RPKM值或者其它歸一化好的表達(dá)量。
(2)臨床信息或者其它表型,也就是樣本的屬性。

在前幾篇學(xué)習(xí)筆記里,我得到了TCGA數(shù)據(jù)庫里的count矩陣(整合gdc-client批量下載的文件),并且把它轉(zhuǎn)化成了FPKM(如何把從TCGA下載的HTseq count轉(zhuǎn)換成FPKM)?,F(xiàn)在要做的就是得到臨床信息了。

這里你需要進(jìn)入你之前TCGA下載的頁面:

之前,我們點(diǎn)擊了Download下載了count矩陣,點(diǎn)擊Metadata,下載了與count矩陣相對應(yīng)的一些信息,比如各種id,各種測序的信息?,F(xiàn)在需要另一個(gè)東西,就是上圖里的“clinical”。點(diǎn)擊它,選擇“JSON”格式:

根據(jù)生信菜鳥團(tuán)的講解:

臨床信息表型的dataframe需要自己制作,這個(gè)是學(xué)習(xí)WGCNA的基礎(chǔ),本次實(shí)例代碼都是基于這兩個(gè)數(shù)據(jù)。至于如何做出上面代碼的兩個(gè)例子,取決于大家自己的項(xiàng)目。

所以可能每個(gè)人所需要的臨床信息不一樣,比如說肺癌,你可能會(huì)需要“smoke”的信息;或者口腔癌,你可能需要“alcohol”的信息。或者你想研究原發(fā)和復(fù)發(fā)的差異,那么你應(yīng)該關(guān)注treatment里的信息。我這里只是舉個(gè)例子,知道怎么提取信息,就可以為所欲為了。。。

這里我分成3個(gè)部分來說明,因?yàn)橄螺d完clinical的信息你會(huì)發(fā)現(xiàn),臨床的樣品和測序的count樣品數(shù)是不一樣的,我查了一些文章,說是有個(gè)別patient樣品重復(fù)測序的情況。你需要分析這個(gè)樣品數(shù)的區(qū)別到底是什么。

從count矩陣對應(yīng)的metadata里提取信息(cancer or normal)

對于一個(gè)count矩陣來說,可能我們需要關(guān)注它的點(diǎn)在于,每一個(gè)樣品是來自tumor組織還是normal對照。

#載入FPKM矩陣
> a = read.csv("TCGA_HNSCC_count2FPKM.csv",header = TRUE, sep=",")
#養(yǎng)成隨時(shí)查看你生成的東西的好習(xí)慣
> View(a) 
#發(fā)現(xiàn)第一列是基因名,把第一列設(shè)置成行名
> rownames(a) = a[,1]
#刪除第一列 
> a = a[,-1] 

根據(jù)metadata.json中的信息,對數(shù)據(jù)進(jìn)行分組cancer or normal :

#因?yàn)镕PKM矩陣的最后一列是基因長度,所以只要前546列樣品的信息
> b = a[,1:546]
#group_name: etc: TCGA-BB-4224-01A-01R-1436-07
> group_name=colnames(b) 
#提取第14,15位字符,規(guī)則請看我前一篇筆記關(guān)于TCGA編號的規(guī)則
> group_name=substr(group_name,14,15) 
#小于10的是cancer,大于10的是正常或癌旁
> group=ifelse(as.numeric(group_name)<10,1,0) 
> group=factor(group,levels = c(0,1),labels = c('normal','cancer'))
#將分組存為一個(gè)data.frame
> group = as.data.frame(group)
> rownames(group) = colnames(b)
> head(group)
> colnames(group)

現(xiàn)在,我的group長這樣:

把FPKM矩陣的樣品名換成case_id,為了下面和臨床信息進(jìn)行比較:

> library(rjson)
#分別讀入兩個(gè)文件,metadata是和FPKM矩陣對應(yīng)的,clinical是臨床文件
> x = fromJSON(file='metadata.cart.2020-04-17.json')
> trait = fromJSON(file='clinical.cart.2020-04-17.json')
> n = ncol(b)
> case_id=rep(0,n)
> TCGA_id = rep(0,n)
> for(i in 1:n){
  case_id[i]=x[[i]]$associated_entities[[1]]$case_id
  TCGA_id[i]=x[[i]]$associated_entities[[1]]$entity_submitter_id
} #這里我從metadata里提取了case_id和TCGA的標(biāo)準(zhǔn)編號
> sample_matrix = data.frame(case_id = case_id, TCGA_id = TCGA_id)
> head(sample_matrix)

看一下我從metadata里提取的case_id和TCGA編號:

接下來把FPKM矩陣的樣品名換成case_id,這樣后面可以和臨床信息對應(yīng)上:

> colnames(b)=sample_matrix$case_id
> View(b)

把前面的group和case_id,TCGA_id合并起來:

> sample546_info <- cbind(group,sample_matrix)
> head(sample546_info)

上面就是從count矩陣對應(yīng)的metadata里提取的信息。

從臨床JSON文件里提取需要的信息

上面說了,每個(gè)人研究的重點(diǎn)不一樣,關(guān)注點(diǎn)也不一樣,所以一定要根據(jù)你的實(shí)際情況來選擇性的提取,不要盲目copy代碼。
比如我研究的cancer,它的原發(fā)部位會(huì)有不同,那么我就想提取臨床信息里的case_id,腫瘤分期,以及腫瘤的起始部位,并把它們存成一個(gè)dataframe:

> m = length(trait)
> clinic_case_id=rep(0,m)
> stage=rep(0,m)
> tumor_origin_site = rep(0,m)
> for (i in 1:m){
  clinic_case_id[i] = trait[[i]]$case_id
  stage[i] = trait[[i]]$diagnoses[[1]]$tumor_stage
  tumor_origin_site[i] = trait[[i]]$diagnoses[[1]]$tissue_or_organ_of_origin
}
> clinic_info = data.frame(case_id= clinic_case_id, tumor_stage = stage,tumor_origin = tumor_origin_site)
> head(clinic_info)
> rownames(clinic_info)
> colnames(clinic_info)

看一下從臨床JSON文件里提取的信息:

NOTE:我下載的clinical文件只有501個(gè)樣品,而FPKM樣品數(shù)是546個(gè)。有些文章說可能存在同一個(gè)病人的樣品重復(fù)測序,那么就來看一下是不是:

合并兩個(gè)dataframe

利用merge函數(shù)合并sample546_info和臨床信息,這里為什么用merge呢?merge可以合并兩個(gè)行數(shù)不同的dataframe,參數(shù)信息見下面:

#通過case_id字段作為連接列,將clinic_info中信息匹配到sample546_info中
#by="case_id"指定連接列(兩個(gè)數(shù)據(jù)集均有的列)為case_id字段。
#all.x = TRUE表示以sample546_info數(shù)據(jù)集為參照,將clinic_info中的信息匹配過來。
> all_info <- merge(sample546_info, clinic_info, by="case_id",all.x = TRUE)
> head(all_info)

看一下合并之后的:

查看是否有重復(fù)的case

現(xiàn)在來看看是否有重復(fù)的patient測序的信息,查看case_id列的重復(fù)項(xiàng):

# 顯示重復(fù)項(xiàng)
> all_info[duplicated(all_info$case_id),]

 case_id  group                      TCGA_id  tumor_stage                                       tumor_origin
16  0858c8b7-e2eb-4461-b65e-9d476029ad8d cancer TCGA-CV-7250-01A-11R-2016-07    stage iva                                        Larynx, NOS
18  0871333c-1088-4af1-a365-12256643c5bd cancer TCGA-CV-6935-01A-11R-1915-07    stage iva                                        Larynx, NOS
20  08a45833-16a3-4a57-a310-307ec086e558 normal TCGA-CV-7438-11A-01R-2132-07      stage i                                        Tongue, NOS
63  1dd23cd6-3aa8-4553-8813-04701451846e normal TCGA-CV-7103-11A-01R-2016-07    stage iva                                        Tongue, NOS
78  241d9310-9137-42dd-b28d-0dc50c44cb43 cancer TCGA-CV-7101-01A-11R-2016-07     stage ii                                        Larynx, NOS
..........

看一下有多少個(gè)重復(fù)項(xiàng):

> dup = all_info[duplicated(all_info$case_id),]
> nrow(dup)
[1] 45 #說明有45個(gè)重復(fù)的case_id

這里顯示有重復(fù)的case,那么要?jiǎng)h除嗎?先來看一下,我選取了上面顯示的第一個(gè)重復(fù)項(xiàng),去all_info里查看一下區(qū)別在哪兒(在Rstudio里View頁面ctrl+F搜索):

從查詢的結(jié)果可以看到:雖然有兩個(gè)相同的case_id,測序樣品來自同一病人,但是兩個(gè)測序一個(gè)是測的正常/癌旁組織,一個(gè)測的是腫瘤組織。這樣的情況就不能刪除,以防后續(xù)我們要進(jìn)行正常和腫瘤的差異比較。

但是如果你的重復(fù)樣品確實(shí)是同樣的組織測了兩次,那么就要?jiǎng)h除重復(fù)的,具體如何操作,請看文章:數(shù)據(jù)挖掘?qū)n} | TCGA樣本命名詳解 。

那么我這個(gè)FPKM矩陣?yán)镉卸嗌賯€(gè)正常/癌旁組織呢?

> sum(all_info$group == "normal")
[1] 44

NOTE:現(xiàn)在我知道FPKM矩陣?yán)锏臉悠窋?shù)是546個(gè),臨床樣品數(shù)是501個(gè),那么501+44= 545個(gè),還有一個(gè)我就不想去追究了(我好懶。。。),感覺1個(gè)重復(fù)測序?qū)?00個(gè)樣品里應(yīng)該沒太大影響。

現(xiàn)在對于我下載的這個(gè)TCGA的數(shù)據(jù)來講,有了FPKM矩陣,又有了需要的臨床信息,基本上不管是WGCNA還是差異基因的分析應(yīng)該都可以進(jìn)行了。

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

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

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