TCGA數據挖掘(六):WGCNA(加權基因共表達網路分析)

  • 2019 年 10 月 4 日
  • 筆記

基因共表達網路分析(Gene Co-expression Network Analysis)是基於基因間表達數據的相似性而構建的網路圖,圖中的節點代表基因,具有相似表達譜的基因被連接起來形成網路。

共表達網路的建設從概念上來講是簡單直觀的,通過基因表達的相似性可分析基因產物可能的相互作用關係,從而了解基因間相互作用脈絡及尋找核心基因。核心基因是重要的樞紐,在網路模組中起關鍵性作用。

關於共表達分析可閱讀這篇文獻:

https://www.ncbi.nlm.nih.gov/pubmed/28077403

加權基因共表達網路分析(WGCNA,Weighted gene co-expression network analysis),WGCNA能夠從複雜數據中(N多分組)快速地提取出與樣本特徵相關的基因共表達模組,以供後續分析。簡單地說,它通過計算基因之間的表達相關性,將具有表達相關性的基因聚類到一個模組中,然後再分析模組與樣本特徵(包括臨床特徵、手術方式、治療方法等等)之間的相關性,WGCNA搭建了一座樣本特徵與基因表達變化之間的橋樑。

理解WGCNA,需要先理解下面幾個術語和它們在WGCNA中的定義。

共表達網路:定義為加權基因網路。點代表基因,邊代表基因表達相關性。加權是指對相關性值進行冥次運算(冥次的值也就是軟閾值 (power,pickSoftThreshold這個函數所做的就是確定合適的power))。無向網路的邊屬性計算方式為abs(cor(genex, geney)) ^ power;有向網路的邊屬性計算方式為(1+cor(genex, geney)/2) ^ power; sign hybrid的邊屬性計算方式為cor(genex, geney)^power if cor>0 else 0。這種處理方式強化了強相關,弱化了弱相關或負相關,使得相關性數值更符合無標度網路特徵,更具有生物意義。如果沒有合適的power,一般是由於部分樣品與其它樣品因為某種原因差別太大導致的,可根據具體問題移除部分樣品或查看後面的經驗值。

Module(模組):高度內連的基因集。在無向網路中,模組內是高度相關的基因。在有向網路中,模組內是高度正相關的基因。把基因聚類成模組後,可以對每個模組進行三個層次的分析:1. 功能富集分析查看其功能特徵是否與研究目的相符;2. 模組與性狀進行關聯分析,找出與關注性狀相關度最高的模組;3. 模組與樣本進行關聯分析,找到樣品特異高表達的模組。

Connectivity (連接度):類似於網路中 "度"(degree)的概念。每個基因的連接度是與其相連的基因的邊屬性之和。

Module eigengene E:給定模型的第一主成分,代表整個模型的基因表達譜。

Intramodular connectivity:給定基因與給定模型內其他基因的關聯度,判斷基因所屬關係。

Module membership: 給定基因表達譜與給定模型的eigengene的相關性。

Hub gene: 關鍵基因 (連接度最多或連接多個模組的基因)。

Adjacency matrix(鄰接矩陣):基因和基因之間的加權相關性值構成的矩陣。

TOM (Topological overlap matrix):把鄰接矩陣轉換為拓撲重疊矩陣,以降低噪音和假相關,獲得的新距離矩陣,這個資訊可拿來構建網路或繪製TOM圖。

數據融合

下面我們以之前我們分析的2組數據為例,一個是來自文章:TCGA數據挖掘(四):表達差異分析(2)或者TCGA數據挖掘(四):表達差異分析(3)的mRNA的表達差異基因的矩陣,也可以是2者的交集;另外一個是miRNA表達的差異矩陣數據,來自文章:TCGA數據挖掘(五):miRNA差異分析

我們將2個文件放在同一個文件夾下

我們首先要做的是將2個矩陣文件合併成一文件,雖然這些數據都是來自於同一數據集,一個是mRNA的數據,一個是miRNA的數據,不同的數據類型中,同一病人的編號不同,也就是TCGA條碼,我們在文章:TCGA數據挖掘(一):TCGAbiolinks包介紹中也有關於TCGA條碼的介紹,同一病人的話前12位barcode應該是相同的。所以我們合併數據就是將具有mRNA數據又有miRNA數據的病人合併,只有其中一個的病人數據樣本將被拋棄。

setwd("E:\BioInfoCloud\coexpressionMerge")   #設置工作目錄(需修改)  miRNA = read.table("diffmiRNAExp.txt", row.names=1 ,header=T,sep="t",check.names=F)  RNA = read.table("diffmRNAExp.txt", row.names=1 ,header=T,sep="t",check.names=F)  colnames(miRNA)=gsub("(.*?)\-(.*?)\-(.*?)\-(.*?)\-.*","\1\-\2\-\3\-\4",colnames(miRNA))  colnames(RNA)=gsub("(.*?)\-(.*?)\-(.*?)\-(.*?)\-.*","\1\-\2\-\3\-\4",colnames(RNA))  sameSample=intersect(colnames(miRNA),colnames(RNA))  merge=rbind(id=sameSample,miRNA[,sameSample],RNA[,sameSample])  write.table(merge,file="merge.txt",sep="t",quote=F,col.names=F

運行程式碼後,會生成一個merge.txt的文件,行名就是miRNA的名稱或者是基因名稱,列名就是病人的部分barcode

做共表達分析,後面要繪製網路圖,需要節點文件,所以這裡我們也要生成一個:

miRNALabel=cbind(rownames(miRNA),"miRNA")  RNALabel=cbind(rownames(RNA),"gene")  nodeLabel=rbind(c("ID","Classify"),miRNALabel,RNALabel)  write.table(nodeLabel,file="nodeLabel.txt",sep="t",quote=F,col.names=F,row.names=F)

WGCN分析

install.packages(c("matrixStats", "Hmisc", "splines", "foreach", "doParallel", "reshape", "fastcluster", "dynamicTreeCut", "survival"))  install.packages("WGCNA")    setwd("E:\BioInfoCloud\WGCNA\2_WGCNA")     #設置工作目錄(需修改)  library(WGCNA)  rt=read.table("merge.txt",sep="t",row.names=1,header=T,check.names=F,quote="!")  datExpr = t(rt)    ######select beta value######  powers1=c(seq(1,10,by=1),seq(12,30,by=2))  RpowerTable=pickSoftThreshold(datExpr, powerVector=powers1)[[2]]  cex1=0.7  #pdf(file="softThresholding.pdf")  par(mfrow=c(1,2))  plot(RpowerTable[,1], -sign(RpowerTable[,3])*RpowerTable[,2],xlab="Soft Threshold (power)",ylab="Scale Free Topology Model Fit,signed R^2",type="n")  text(RpowerTable[,1], -sign(RpowerTable[,3])*RpowerTable[,2], labels=powers1,cex=cex1,col="red")  # this line corresponds to using an R^2 cut-off of h  abline(h=0.85,col="red")  plot(RpowerTable[,1], RpowerTable[,5],xlab="Soft Threshold (power)",ylab="Mean Connectivity", type="n")  text(RpowerTable[,1], RpowerTable[,5], labels=powers1, cex=cex1,col="red")

運行上面程式碼後會出現一個圖,根據這個圖,我們可以選擇合適的power值,我們這裡選擇9.

beta1=9  #計算鄰近距離  ADJ= adjacency(datExpr,power=beta1)  vis=exportNetworkToCytoscape(ADJ,edgeFile="edge.txt",nodeFile="node.txt",threshold = 0.8)  

運行所有程式碼後我們就會得到一個文件edge.txt的文件。

CytoScape繪製網路圖

導入文件

導入node文件

這就構建好網路圖了,當然這圖沒有美化,自己調整網路圖了,這就是cytoscape的使用教程啦,大家可以在網上找教程,當然關注本公眾號,我們後續也會推出一些軟體的使用教程。