從原始芯片.cel數(shù)據(jù)到權(quán)重基因共表達(dá)網(wǎng)絡(luò)(WGCNA)詳細(xì)流程

看這個(gè)之前,可以先看WGCNA的一些理論背景知識(shí)
看完整個(gè)之后可以去看WGCNA關(guān)鍵模塊和hub基因篩選

相似的表達(dá)模式可能是

-1 tightly co-regulated
-2 functionally related
-3 members of the same pathway

總體思路流程

-1 準(zhǔn)備數(shù)據(jù),并進(jìn)行初步過(guò)濾(準(zhǔn)備數(shù)據(jù),并進(jìn)行初步過(guò)濾)
-2 把表達(dá)譜和traits文件載入R并準(zhǔn)備成WGCNA需要的格式](#二把表達(dá)譜和traits文件載入R并準(zhǔn)備成WGCNA需要的格式)
-3 traits熱圖看有無(wú)outlier相當(dāng)于質(zhì)量控制(
-4 選擇軟閾值:為下一步構(gòu)建網(wǎng)絡(luò)準(zhǔn)備
-5 構(gòu)建網(wǎng)絡(luò)(建立模塊,并和外部信息構(gòu)建連接)

方法

兩種方法三種也行:

第一種,一步建網(wǎng)和下面第三種(可以和軟件交互,自己設(shè)定參數(shù))比較而言,模塊自動(dòng)檢測(cè)函數(shù)內(nèi)嵌了模塊檢測(cè)的所有步驟,比如自動(dòng)構(gòu)建相關(guān)性網(wǎng)絡(luò),生成cluster樹(shù),定義模塊為分支,merge相近(相關(guān)性大的)模塊。輸出的是模塊顏色,模塊特征基因,而這些可以用于后續(xù)的分析。同時(shí),user也可以把模塊檢測(cè)的結(jié)果可視化智能模塊檢測(cè)的功能有很多參數(shù),并且在作者的例子里,大多數(shù)都采取了默認(rèn)值。我們也試圖提供可行的缺省值,但是對(duì)于具體的數(shù)據(jù)分析來(lái)說(shuō)可能不那么合理,因?yàn)樽髡呦敕治龅倪€不一樣。我們鼓勵(lì)user多讀下幫助文件,并改變參數(shù)體驗(yàn)一下。

第二種, 作者用的共表達(dá)網(wǎng)絡(luò)用了相對(duì)比較少的數(shù)據(jù),也就是3600個(gè)探針。然而,現(xiàn)在的微陣列測(cè)量有的超過(guò)50,000個(gè)probe表達(dá)水平。構(gòu)建和分析如此大的nodes對(duì)一個(gè)大型服務(wù)器來(lái)說(shuō)也是一種挑戰(zhàn)。我們現(xiàn)在演示一種方法,這個(gè)也內(nèi)嵌入了WGCNA包,而這可以讓user用這么大的數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)分析。實(shí)際上不是使用這么大的數(shù)據(jù),軟件包會(huì)假裝電腦硬件不允許使用多于2000個(gè)gene進(jìn)行分析。這個(gè)根本的理念是使用two-level聚類(lèi)。第一,軟件使用一個(gè)快速的,計(jì)算廉價(jià)且相對(duì)粗糙的聚類(lèi)方法來(lái)預(yù)先聚類(lèi)基因到一個(gè)bolck并且數(shù)目接近但不會(huì) 最大數(shù)目2000個(gè)gene。然后,對(duì)每個(gè)block單獨(dú)執(zhí)行full網(wǎng)絡(luò)分析。最后,那些egienggenes高度相關(guān)的模塊merged到一起。這種方法的優(yōu)勢(shì)在于,以比較小的內(nèi)存就可以運(yùn)行,而這個(gè)問(wèn)題是在所有標(biāo)準(zhǔn)的桌面電腦中普遍存在的情況,這是計(jì)算的加速。這個(gè)block或許不是最優(yōu)的,會(huì)導(dǎo)致一些outlying genes被分派到一個(gè)不同的module中,而原來(lái)在全網(wǎng)絡(luò)分析可能不在這個(gè)模塊中。

第三種,逐步進(jìn)行模塊檢測(cè)可以提供用戶(hù)和軟件相互交互的界面,這非常便利。
作者文件里會(huì)展示內(nèi)嵌到WGCNA里的步步建網(wǎng)的步驟。
1.定義一個(gè)權(quán)重的鄰接矩陣
2.定義這個(gè)拓?fù)渲丿B矩,基于不相似檢測(cè)dissTOM
3.構(gòu)建等級(jí)聚類(lèi)樹(shù)(average linage)
4.定義樹(shù)的分支為模塊


從芯片原始數(shù)據(jù)到WGCNA具體步驟

1準(zhǔn)備數(shù)據(jù),并進(jìn)行初步過(guò)濾

獲得CEL數(shù)據(jù),并進(jìn)行初步處理,比如之前的qc,但是這個(gè)可以不做,因?yàn)楹竺鏁?huì)有其他甄別方式。在本地磁盤(pán)建立文件夾,把所需要的數(shù)據(jù)命名好全部放進(jìn)去(命名很重要,后面省卻很多麻煩),表達(dá)譜文件有人用log2轉(zhuǎn)換的,有人用差異基因,官方文件和專(zhuān)業(yè)人士推薦用原始的數(shù)據(jù),之前只要進(jìn)行過(guò)濾就可以,把表達(dá)差異很小的還有不穩(wěn)定的數(shù)據(jù)進(jìn)行剔除。要知道這個(gè)和上面的qc不一樣,上面的qc是剔除不合格的芯片,而這一步是剔除芯片中的數(shù)據(jù)。那么是線剔除芯片還是線處理數(shù)據(jù),都可以。先剔除芯片的話會(huì)減少點(diǎn)工作量,但對(duì)于WGCNA需要的大量樣本來(lái)說(shuō),這點(diǎn)可以忽略。再者專(zhuān)業(yè)人士也建議不要剔除芯片除非充足理由要剔除。也就是我們先處理芯片的數(shù)據(jù),進(jìn)行filter.

setwd("D:\\LRWGCNA")
library(affy)
library(limma)
source("http://bioconductor.org/biocLite.R")
source("https://bioconductor.org/biocLite.R")
biocLite("affy")
biocLiate("affyPLM")
biocLite("RcolorBrewer")
biocLite("impute")
biocLite("limma")
biocLite("pheatmap")
biocLite("ggplot2")
Data<-ReadAffy()
sampleNames(Data)
eset.mas5<-mas5(Data)
calls <- mas5calls(Data)
calls<-exprs(calls)
absent <- rowSums(calls == 'A') # how may samples are each gene'absent' in
absent <- which (absent == ncol(calls)) # which genes are 'absent' in all samples
rmaFiltered <- rmaData[-absent,] # filters out the genes 'absent' in all samples
head(rmaFiltered)
write.csv(rmaFiltered,file="wgcna.csv")

準(zhǔn)備traits文件,可以提前在excel準(zhǔn)備好,然后另存為datTraits.csv
一定注意,第一列sample的名字一定和上面的表達(dá)譜文件一致,否則后面讀不出來(lái)

2 把表達(dá)譜和traits文件載入R并準(zhǔn)備成WGCNA需要的格式

setwd("D:\\Rworkdirectory\\WGCNA") # Change the text within quotes as necessary. I have downloaded and unzipped the WGCNA folder on my Desktop
# Uploading data into R and formatting it for WGCNA --------------
# This creates an object called "datExpr" that contains the normalized counts file output from DESeq2
datExpr = read.csv("wgcna.csv")
head(datExpr)
# Manipulate file so it matches the format WGCNA needs,處理下符合wgcna的格式
row.names(datExpr) = datExpr$X
datExpr$X = NULL
datExpr = as.data.frame(t(datExpr)) # now samples are rows and genes are columns
dim(datExpr) # 48 samples and 1000 genes (you will have many more genes in reality)
# Run this to check if there are gene outliers
gsg = goodSamplesGenes(datExpr, verbose = 3)
gsg$allOK

這必須里顯示是TRUE,否則執(zhí)行下面代碼

#If the last statement returns TRUE, all genes have passed the cuts. If not, we remove the offending genes and samples from the data with the following:

if (!gsg$allOK)
    {if (sum(!gsg$goodGenes)>0)
        printFlush(paste("Removing genes:", paste(names(datExpr)[!gsg$goodGenes], collapse= ", ")));
        if (sum(!gsg$goodSamples)>0)
            printFlush(paste("Removing samples:", paste(rownames(datExpr)[!gsg$goodSamples], collapse=", ")))
        datExpr= datExpr[gsg$goodSamples, gsg$goodGenes]
        }

加載traits文件

#Create an object called "datTraits" that contains your trait data
datTraits = read.csv("LRtraits.csv")
head(datTraits)

#form a data frame analogous to expression data that will hold the clinical traits.
rownames(datTraits) = datTraits$Sample
datTraits$Sample = NULL
table(rownames(datTraits)==rownames(datExpr)) #should return TRUE if datasets align correctly,otherwise your names are out of order

這里必須是TRUE,否則下面無(wú)法執(zhí)行。錯(cuò)誤原因應(yīng)該在命名上。
到現(xiàn)在為止,所有的文件已經(jīng)上傳好了,那就等著進(jìn)入分析過(guò)程。
記得把文件寫(xiě)入本地盤(pán)

save(datExpr, datTraits, file="SamplesAndTraits.RData")
#load("SamplesAndTraits.RData")

3 traits熱圖看有無(wú)outlier相當(dāng)于芯片篩選

# Cluster samples by expression
A = adjacency(t(datExpr),type="signed") # this calculates the whole network connectivity
k = as.numeric(apply(A,2,sum))-1 # standardized connectivity
Z.k = scale(k)
thresholdZ.k = -2.5 # often -2.5
outlierColor = ifelse(Z.k<thresholdZ.k,"red","black")
sampleTree = flashClust(as.dist(1-A), method = "average")
# Convert traits to a color representation where red indicates high values
traitColors = data.frame(numbers2colors(datTraits,signed=FALSE))
dimnames(traitColors)[[2]] = paste(names(datTraits))
datColors = data.frame(outlier = outlierColor,traitColors)
plotDendroAndColors(sampleTree,groupLabels=names(datColors),
                    colors=datColors,main="Sample Dendrogram and Trait Heatmap")

嚴(yán)重離群樣本可以剔除,一般建議不要剔除。假如真的想剔除,執(zhí)行下面代碼

# Remove outlying samples 
remove.samples = Z.k<thresholdZ.k | is.na(Z.k)
datExprOut = datExpr[!remove.samples,]
datTraitsOut = datTraits[!remove.samples,]
save(datExprOut, datTraitsOut, file="SamplesAndTraits_OutliersRemoved.RData")

4 選擇軟閾值:為下一步構(gòu)建網(wǎng)絡(luò)準(zhǔn)備

關(guān)于軟閾值的理論
一般認(rèn)為,在一個(gè)網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)的重要性是一樣的,而實(shí)際上,在很多真實(shí)網(wǎng)絡(luò)中,一個(gè)node對(duì)應(yīng)的degree(connectivity,也稱(chēng)為連接度,是與該節(jié)點(diǎn)相連的節(jié)點(diǎn)數(shù))與這個(gè)node出現(xiàn)的概率并不是符合普通的平均分布,而是符合冪分布。這樣的網(wǎng)絡(luò)叫無(wú)尺度網(wǎng)絡(luò)(scale free network)。這種網(wǎng)絡(luò)有很高異質(zhì)性,其拓?fù)浣Y(jié)構(gòu)主要由其中少數(shù)具有高連接度的點(diǎn)(hubs,中心點(diǎn),也叫樞紐)決定。例如對(duì)酵母分析蛋白互作網(wǎng)絡(luò)發(fā)現(xiàn),高degree節(jié)點(diǎn)對(duì)生存意義更重要。無(wú)尺度網(wǎng)絡(luò)對(duì)外部環(huán)境有很強(qiáng)的糾錯(cuò)能力。例如一些簡(jiǎn)單生物即使在苛刻的藥物處理和環(huán)境干預(yù)下仍然能夠保持基本的持續(xù)生長(zhǎng)和繁殖。正是這種特性使得包括代謝網(wǎng)絡(luò)在內(nèi)的生物網(wǎng)絡(luò)對(duì)環(huán)境有很強(qiáng)的穩(wěn)定性。但另一方面,這樣的特性使得網(wǎng)絡(luò)本身容易受到攻擊,特別是如果網(wǎng)絡(luò)中的中心點(diǎn)被屏蔽,那么網(wǎng)絡(luò)可能崩潰,整個(gè)網(wǎng)絡(luò)性質(zhì)也因此而發(fā)生改變。
傳統(tǒng)的基因共表達(dá)模式的研究主要利用皮爾遜相關(guān)系數(shù)來(lái)衡量基因與基因之間的相關(guān)性。近年有研究推薦通過(guò)對(duì)皮爾遜相關(guān)系數(shù)設(shè)定閾值(硬閾值,與下面的軟閾值相對(duì))確定網(wǎng)絡(luò)的存在。在這種網(wǎng)絡(luò)中,一個(gè)node代表一個(gè)基因的表達(dá)水平(這點(diǎn)要和cytoscape中的node區(qū)分開(kāi),cytoscape里的node是基因本身而不是表達(dá)水平,里面的連接靠的是已有的基因之間的關(guān)系,而不是基因表達(dá)水平之間的相關(guān)系數(shù)),不同情形下,兩個(gè)節(jié)點(diǎn)的相關(guān)系數(shù)超過(guò)預(yù)先設(shè)定的閾值,說(shuō)明這兩個(gè)節(jié)點(diǎn)彼此連接。但這樣會(huì)產(chǎn)生一個(gè)問(wèn)題,如果確定這個(gè)閾值。如果人為硬性劃一個(gè)值,那么可能會(huì)丟失一些真實(shí)的信息,也就是相關(guān)系數(shù)0.79和0.81真的差別那么大嗎。所以,wgcna對(duì)基因間的相關(guān)系數(shù)進(jìn)行加權(quán),加權(quán)的標(biāo)準(zhǔn)是在每個(gè)網(wǎng)絡(luò)中,基因和基因之間的聯(lián)系要符合無(wú)尺度網(wǎng)絡(luò)分布。
前面說(shuō)了,基因共表達(dá)網(wǎng)絡(luò)符合無(wú)尺度現(xiàn)象也就是冪律分布。那么wgcna通過(guò)對(duì)加權(quán)系數(shù)的選擇來(lái)獲得最符合無(wú)尺度網(wǎng)絡(luò)分布的結(jié)果。判斷標(biāo)準(zhǔn)符合無(wú)尺網(wǎng)絡(luò)的定義:出現(xiàn)連接度為K的節(jié)點(diǎn)的個(gè)數(shù)的對(duì)數(shù)log(k)與該節(jié)點(diǎn)出現(xiàn)的概率的對(duì)數(shù)log(p(k))負(fù)相關(guān),且相關(guān)系數(shù)要大于0.8.同時(shí)對(duì)每一個(gè)模塊來(lái)說(shuō),每一個(gè)基因的平均連接度應(yīng)該保證比較高,這樣的模塊被檢測(cè)到才有意義。

# Choose a soft threshold power- USE A SUPERCOMPUTER IRL -----------
powers = c(c(1:10), seq(from =10, to=30, by=1)) #choosing a set of soft-thresholding powers
sft = pickSoftThreshold(datExpr, powerVector=powers, verbose =5, networkType="signed") #call network topology analysis function
sizeGrWindow(9,5)
par(mfrow= c(1,2))
cex1=0.9
plot(sft$fitIndices[,1], -sign(sft$fitIndices[,3])*sft$fitIndices[,2], xlab= "Soft Threshold (power)", ylab="Scale Free Topology Model Fit, signed R^2", type= "n", main= paste("Scale independence"))
text(sft$fitIndices[,1], -sign(sft$fitIndices[,3])*sft$fitIndices[,2], labels=powers, cex=cex1, col="red")
#有的論文的是R2大于0.85
abline(h=0.90, col="red")
plot(sft$fitIndices[,1], sft$fitIndices[,5], xlab= "Soft Threshold (power)", ylab="Mean Connectivity", type="n", main = paste("Mean connectivity"))
text(sft$fitIndices[,1], sft$fitIndices[,5], labels=powers, cex=cex1, col="red")
#檢驗(yàn)選定的閾值下網(wǎng)絡(luò)是否逼近scale free
#有錯(cuò)誤,無(wú)法運(yùn)行
ADJ1=abs(cor(datExpr,use=”p”))^8
k=as.vector(apply(ADJ1,2,sum,na.rm=T))
sizeGrWindow(10,5)
par(mfrow=c(1,2))
hist(k)
scaleFreePlot(k,main=”Check scale free topology\n)
enableWGCNAThreads()
#用power=1**8****建立鄰接矩陣**
softPower = 18
#建立鄰接矩陣
adjacency = adjacency(datExpr, power = softPower, type = "signed") #specify network type
#translate the adjacency into topological overlap matrix and calculate the corresponding #dissimilarity:將鄰接矩陣轉(zhuǎn)換為拓?fù)渚仃?TOM = TOMsimilarity(adjacency, TOMType="signed") # specify network type OGM2hours
dissTOM = 1-TOM
# Generate Modules --------------------------------------------------------
# Generate a clustered gene tree以TOM為基礎(chǔ)聚類(lèi)
geneTree = flashClust(as.dist(dissTOM), method="average")
plot(geneTree, xlab="", sub="", main= "Gene Clustering on TOM-based dissimilarity", labels= FALSE, hang=0.04)
#This sets the minimum number of genes to cluster into a module
#動(dòng)態(tài)剪切樹(shù)法切割模塊,選擇動(dòng)態(tài)混合切割法
minModuleSize = 30
dynamicMods = cutreeDynamic(dendro= geneTree, distM= dissTOM, deepSplit=2, pamRespectsDendro= FALSE, minClusterSize = minModuleSize)
dynamicColors= labels2colors(dynamicMods)
#合并相似的共表達(dá)網(wǎng)絡(luò),相當(dāng)于把上一部篩選得到的modules再進(jìn)行聚類(lèi),使用函數(shù)#moduleEigegenes(),確定修剪高度后,使用mergeCloseModules()函數(shù)合并modeles
#set a threhold for merging modules. In this example we are not merging so MEDissThres=0.0
MEList= moduleEigengenes(datExpr, colors= dynamicColors,softPower = 18)
MEs= MEList$eigengenes
MEDiss= 1-cor(MEs)
METree= flashClust(as.dist(MEDiss), method= "average")
#plots tree showing how the eigengenes cluster together
plot(METree, main= "Clustering of module eigengenes", xlab= "", sub= "")
#選擇相關(guān)系數(shù)大于0.8的進(jìn)行合并(下面不是0.2而是0.25)
MEDissThres = 0.2
merge = mergeCloseModules(datExpr, dynamicColors, cutHeight= MEDissThres, verbose =3)
mergedColors = merge$colors
sizeGrWindow(12,9)
mergedMEs = merge$newMEs
save(dynamicMods, MEList, MEs, MEDiss, METree, file= "Network_allSamples_signed_RLDfiltered.RData")
#plot dendrogram with module colors below it
plotDendroAndColors(geneTree, cbind(dynamicColors, mergedColors), c("Dynamic Tree Cut", "Merged dynamic"), dendroLabels= FALSE, hang=0.03, addGuide= TRUE, guideHang=0.05)
moduleColors = mergedColors
colorOrder = c("grey", standardColors(50))
moduleLabels = match(moduleColors, colorOrder)-1
MEs = mergedMEs
save(MEs, moduleLabels, moduleColors, geneTree, file= "Network_allSamples_signed_nomerge_RLDfiltered.RData")

上面這個(gè)運(yùn)行過(guò)程有點(diǎn)長(zhǎng)大概15mins

image.png

從上面這個(gè)圖我選擇power為24 因?yàn)檫@是閾值到0.90的最小值

5 構(gòu)建網(wǎng)絡(luò)(建立模塊,并和外部信息構(gòu)建連接)

具體以下幾個(gè)步驟

5.1.定義基因共表達(dá)的相似矩陣

這個(gè)由基因兩兩之間相關(guān)系數(shù)的絕對(duì)值構(gòu)成。
2.定義基因網(wǎng)絡(luò)形成的鄰接函數(shù)
其實(shí)最直接的是對(duì)基因間的cor設(shè)定硬性閾值,結(jié)果要么是有關(guān)聯(lián)要么是無(wú)關(guān)聯(lián)。但這會(huì)丟失很多信息,前已述及。Wgcna為了克服,提供兩種軟閾值。兩種類(lèi)似,我們采取其中的冪指數(shù)鄰接函數(shù)方法。就是對(duì)每對(duì)基因的相關(guān)系數(shù)進(jìn)行?次方冪指數(shù)運(yùn)算,將其加權(quán),其中?稱(chēng)之為軟閾值那么如何選擇這個(gè)值呢。遵循無(wú)尺度網(wǎng)絡(luò)原則,根據(jù)冪律分布,,連接度為K的出現(xiàn)概率p(k)和連接度K的概率cor達(dá)到0.85.確定了?,就是把相關(guān)矩陣轉(zhuǎn)變?yōu)猷徑泳仃嚒?/p>

5.2上述確定了共表達(dá)矩陣,那么下一步就確定node間的相異度

基因模塊是關(guān)聯(lián)程度高的一組基因組成的。網(wǎng)絡(luò)中有很多方法描述基因之間的關(guān)聯(lián)程度或共性。Wgcna采取拓?fù)渲丿B(topological overlap measure,TOM)計(jì)算基因之間的關(guān)聯(lián)程度。這樣算的模塊有生物意義。把鄰接矩陣轉(zhuǎn)換為拓?fù)渚仃噷?shí)質(zhì)是考慮了基因與基因之間通過(guò)第三者的間接連接。

5.3.確定基因網(wǎng)絡(luò)、模塊

Wgcna將基因模塊定義為高拓?fù)渲丿B的一組基因。具體是對(duì)基因以TOM為基礎(chǔ)的相異度進(jìn)行層次聚類(lèi),建立分層聚類(lèi)樹(shù)。一個(gè)樹(shù)葉就是一個(gè)基因,不同基因模塊便是這棵樹(shù)的樹(shù)枝。那如何確定樹(shù)枝呢,靜態(tài)剪切樹(shù)和動(dòng)態(tài)剪切樹(shù)算法,我們采取動(dòng)態(tài)。
既然共表達(dá)的基因很可能受一個(gè)轉(zhuǎn)錄因子調(diào)控,或有同樣的功能。那么每個(gè)模塊和外部信息,比如臨床特征等有什么關(guān)系嗎。我們的例子就是是不是某個(gè)模塊和某個(gè)時(shí)間點(diǎn)對(duì)應(yīng)呢?等等。

具體的辦法有
-1.計(jì)算得到基因模塊的特征值,再計(jì)算模塊的特征向量與關(guān)注表型的相關(guān)系數(shù)
-2.對(duì)于分組表型如疾病狀態(tài),可以首先定義用t-test計(jì)算每個(gè)基因在不同組之間的基因差異表達(dá)顯著性檢驗(yàn)p值,并將顯著性p值的以10為底的對(duì)數(shù)值定義為基因顯著性(gene significance,GS),再將模塊的顯著性(module significance,Ms)定義為模塊包含的所有基因顯著性性的平均值,然后比較MS,一般MS越高,說(shuō)明這個(gè)模塊與疾病之間的關(guān)聯(lián)度越高
-3.基因的顯著性也可以定義為某個(gè)基因表達(dá)譜與外部信息的相關(guān)性
-4利用基因模塊的樞紐基因推測(cè)基因模塊的成因

# Correlate traits --------------------------------------------------------

#Define number of genes and samples
nGenes = ncol(datExpr)
nSamples = nrow(datExpr)

#Recalculate MEs with color labels
MEs0 = moduleEigengenes(datExpr, moduleColors)$eigengenes
MEs = orderMEs(MEs0)
moduleTraitCor = cor(MEs, datTraits, use= "p")
moduleTraitPvalue = corPvalueStudent(moduleTraitCor, nSamples)

#Print correlation heatmap between modules and traits
textMatrix= paste(signif(moduleTraitCor, 2), "\n(", 
                        signif(moduleTraitPvalue, 1), ")", sep= "")
dim(textMatrix)= dim(moduleTraitCor)
par(mar= c(6, 8.5, 3, 3))
#display the corelation values with a heatmap plot
labeledHeatmap(Matrix= moduleTraitCor, 
            xLabels= names(datTraits), 
            yLabels= names(MEs), 
            ySymbols= names(MEs), 
            colorLabels= FALSE, 
            colors= blueWhiteRed(50), 
            textMatrix= textMatrix, 
            setStdMargins= FALSE, 
            cex.text= 0.5, 
            zlim= c(-1,1), 
            main= paste("Module-trait relationships"))

!
上圖可以看出,和SO相關(guān)最強(qiáng)的paletruquoise,其次是indianred,thistle,midnightblue,如果想以SO為指標(biāo),那可以繼續(xù)研究這四個(gè)模塊。同理,2h相關(guān)最強(qiáng)的是下方那幾個(gè)模塊,可以深入研究。而2h和6h有重疊。120h有一些正相關(guān)和負(fù)相關(guān)模塊,可以深入研究。

由于樣本數(shù)量有點(diǎn)多,所以會(huì)不太清晰。。y軸是模塊名,x軸是樣本名。。每個(gè)模塊都跟每個(gè)樣本有一個(gè)空格,空格的上部分是模塊與樣本的相關(guān)系數(shù)(代碼里面我構(gòu)建了一個(gè)標(biāo)量矩陣代表樣本,然后求了模塊和樣本的相關(guān)系數(shù)),空格的下部分是一個(gè)p值,我猜是代表相關(guān)的顯著性吧(不知道理解對(duì)不對(duì),但是反正都是挑p值越小的越好)。。由于我不知道這個(gè)測(cè)試數(shù)據(jù)的樣本信息各個(gè)代表咋樣的實(shí)驗(yàn),但是如果是有生物學(xué)重復(fù)實(shí)驗(yàn)的話,有人是這樣做的:在3個(gè)生物學(xué)重復(fù)中有2個(gè)樣本在某個(gè)模塊是顯著相關(guān)的話,就挑選作為后續(xù)研究。

#不同模塊基因熱圖及關(guān)鍵基因的表達(dá)
person=cor(datExpr,use = 'p')
corr<-TOM
Colors<-mergedColors
colnames(corr)<-colnames(datExpr)
rownames(corr)<-colnames(datExpr)
names(Colors)<-colnames(datExpr)
colnames(person)<-colnames(datExpr)
rownames(person)<-colnames(datExpr)
umc = unique(mergedColors)
lumc = length(umc)
#change the i to be the number which you want to plot
#改變黃色底的數(shù)字可以plot每個(gè)模塊的圖
for (i in c(1:lumc)){
  if(umc[i]== "grey"){
    next
  }
  ME=MEs[, paste("ME",umc[3], sep="")]
  par(mfrow=c(2,1), mar=c(0.3, 5.5, 3, 2))
 plotMat(t(scale(datExpr[,Colors==umc[3]])),nrgcols=30,rlabels=F,rcols=umc[3], main=umc[3], cex.main=3)
  par(mar=c(5, 4.2, 0, 0.7))
  barplot(ME, col=umc[3], main="", cex.main=2,ylab="eigengene expression",xlab="array sample")
}
image.png

各樣本中模塊基因與相應(yīng)ME的表達(dá)水平
一個(gè)module的基因表達(dá)量與該module特征向量圖
上圖是pink模塊所有基因的表達(dá)水平,行代表?個(gè)模塊基因,列代表57個(gè)樣本。
下面的bar圖為對(duì)于的樣本中pink模塊的ME表達(dá)水平。可以看出ME的表達(dá)水平與整個(gè)模塊內(nèi)基因的表達(dá)水平高度相關(guān)。
簡(jiǎn)單說(shuō)也就是pink這個(gè)模塊在這幾個(gè)sample中表達(dá)最高。
基因共表達(dá)網(wǎng)絡(luò)熱圖

kME=signedKME(datExpr, mergedMEs, outputColumnName = "kME", corFnc = "cor", corOptions = "use = 'p'")

if (dim(datExpr)[2]>=15000) nSelect=15000 else nSelect=dim(datExpr)[2]
set.seed(1)
select = sample(nGenes, size = nSelect)
selectTOM = dissTOM[select, select]
selectTree = hclust(as.dist(selectTOM), method = "average")
selectColors = moduleColors[select]
plotDiss = selectTOM^7
#the following code will take about   mins
#下面這個(gè)圖會(huì)用很長(zhǎng)時(shí)間,用了3多小時(shí)
TOMplot(plotDiss, selectTree, selectColors, main = "Network heatmap plot")


TOM圖是指基因和篩選模型的可視化表示。生成TOM圖的步驟:1. 生成全基因不相似TOM矩陣,比如1-TOMsimilarityFromExpr(datExpr, power = 6),可以把得到的不相關(guān)矩陣加冪,這樣繪制的TOM圖色彩差異會(huì)比較明顯。2. 使用TOMplot()繪制TOM圖,如上圖。圖上和圖左是全基因系統(tǒng)發(fā)育樹(shù),不同顏色亮帶表示不同的module,每一個(gè)亮點(diǎn)表示每個(gè)基因與其他基因的相關(guān)性強(qiáng)弱(越亮表示相關(guān)性越強(qiáng))。
模塊相關(guān)性熱圖

MEs = moduleEigengenes(datExpr, Colors)$eigengenes
MET = orderMEs(MEs)
par(mfrow=c(1,1))
par(mar= c(5, 10.5, 3, 3))
plotEigengeneNetworks(MET, "Eigengene adjacency heatmap", marHeatmap = c(3,4,2,2), plotDendrograms = FALSE, xLabelsAngle = 90)

!](https://upload-images.jianshu.io/upload_images/7976641-aa32e5135f15f7ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
基因顯著性和模塊身份
研究的一個(gè)重要目的是將基因與外部信息的關(guān)聯(lián)程度與基因在相應(yīng)模塊中的重要性聯(lián)合起來(lái)分析,分別被可以由基因顯著性和模塊身份表示。
模塊內(nèi)部連接度(Intramodular connectivity,IC)用來(lái)描述在一個(gè)特定的模塊中的節(jié)點(diǎn)與模塊中其他節(jié)點(diǎn)的關(guān)聯(lián)程度,可以理解為對(duì)模塊身份(Module membership,MM)的一種衡量。多數(shù)情況下,IC和MM有很高相關(guān)性。如下圖。但是IC不能衡量某個(gè)gene在全局網(wǎng)絡(luò)中的位置。為了全局網(wǎng)絡(luò)的層面實(shí)現(xiàn)對(duì)節(jié)點(diǎn)更精確的定位,我們引入模塊身份MM的概念。
對(duì)某一個(gè)基因來(lái)說(shuō),我們用它在所有樣本中的表達(dá)值與某個(gè)特征向量基因ME表達(dá)譜的相關(guān)性來(lái)衡量這個(gè)基因在該模塊中的身份。

簡(jiǎn)單來(lái)說(shuō)就是把每一個(gè)關(guān)注的基因(比如某模塊內(nèi)的基因),看看它在每個(gè)模塊的身份值,屬于某個(gè)模塊極值1,否則-1.
與我們關(guān)注的某個(gè)traits比如2 h相關(guān)的樞紐基因
樞紐基因,hub genes,指的是在一個(gè)模塊中連接度最高的一系列基因。一定程度上他們決定了模塊的特征,和全局網(wǎng)絡(luò)中的樞紐基因相比,模塊中的樞紐基因往往更具有生物學(xué)意義。在作者的模塊truquoise和yellow中,GS和MM具有高度相關(guān)性,因此模塊中的樞紐基因與臨床特征有高相關(guān)性。

關(guān)于WGCNA hub gene的挑選方法,稍后寫(xiě)出。

最后

ME:module eigengene
IC:intramodular connectivity
GS:gene significance
MM:module membership
WGCNA關(guān)鍵模塊和hub基因篩選

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,673評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,610評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,939評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,668評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 56,004評(píng)論 1 329
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評(píng)論 3 449
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,173評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,705評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,426評(píng)論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,656評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,833評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,247評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,580評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,371評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,621評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容