?? WGCNA | 不止一個組的WGCNA怎么分析嘞B嵋铡?~(二)(共識網絡分析-第二步-構建網絡與模塊-分步法)

寫在前面

不知道各位最近過得怎么樣宪萄,昨天去修了腳??艺谆,感覺自己馬上就要邁入油膩中年人的行列了。??

不過說實話拜英,還是挺舒服的静汤,值得再去一次。??

接著更一下WGCNA的教程吧居凶,還是值得大家好好學習一下的虫给。??

今天介紹的是分步法創(chuàng)建網絡與識別模塊,這種比較適合有個性化需求的人使用侠碧,如果你是懶癌晚期抹估,可以直接看上一篇教程。??

用到的包

rm(list = ls())
library(tidyverse)
library(WGCNA)

示例數據

我們還是和之前一樣弄兜,把之前清洗好的輸入數據拿出來吧药蜻。??

load("./Consensus-dataInput.RData")

提取數據集個數

首先和之前一樣提取一下我們的數據集個數,后面會用到替饿。??

nSets <-  checkSets(multiExpr)$nSets

挑選軟閾值并可視化

5.1 創(chuàng)建power

powers <-  c(seq(4,10,by=1), seq(12,20, by=2))

5.2 計算power

和之前一樣语泽,我們?yōu)槊總€數據集計算一下power,挑選軟閾值视卢。??

powerTables = vector(mode = "list", length = nSets)
for (set in 1:nSets){
  
powerTables[[set]] = list(data = pickSoftThreshold(multiExpr[[set]]$data, powerVector=powers,

                                                   verbose = 2)[[2]])
collectGarbage()
}

5.3 可視化相關參數設置

設置一下繪圖的參數踱卵,方便可視化。??

colors = c("black", "red")
plotCols = c(2,5,6,7)
colNames = c("Scale Free Topology Model Fit", "Mean connectivity", "Median connectivity",
"Max connectivity")

ylim = matrix(NA, nrow = 2, ncol = 4);
for (set in 1:nSets)
{
for (col in 1:length(plotCols))
{
ylim[1, col] = min(ylim[1, col], powerTables[[set]]$data[, plotCols[col]], na.rm = TRUE);
ylim[2, col] = max(ylim[2, col], powerTables[[set]]$data[, plotCols[col]], na.rm = TRUE);
}
}

5.4 可視化一下吧

來繪一下圖吧据过。??

sizeGrWindow(8, 6)
par(mfcol = c(2,2));
par(mar = c(4.2, 4.2 , 2.2, 0.5))
cex1 = 0.7;
for (col in 1:length(plotCols)) for (set in 1:nSets)
{
if (set==1)
{
plot(powerTables[[set]]$data[,1], -sign(powerTables[[set]]$data[,3])*powerTables[[set]]$data[,2],
xlab="Soft Threshold (power)",ylab=colNames[col],type="n", ylim = ylim[, col],
main = colNames[col]);
addGrid();
}
if (col==1)
{
text(powerTables[[set]]$data[,1], -sign(powerTables[[set]]$data[,3])*powerTables[[set]]$data[,2],
labels=powers,cex=cex1,col=colors[set]);
} else
text(powerTables[[set]]$data[,1], powerTables[[set]]$data[,plotCols[col]],
labels=powers,cex=cex1,col=colors[set]);
if (col==1)
{
legend("bottomright", legend = setLabels, col = colors, pch = 20) ;
} else
legend("topright", legend = setLabels, col = colors, pch = 20) ;
}

網絡鄰接的計算

網絡構建首先需要使用軟閾值計算各個數據集中的鄰接關系惋砂,前面計算的power6哦妒挎。??

softPower <-  6
adjacencies <-  array(0, dim = c(nSets, nGenes, nGenes))

for (set in 1:nSets){
  adjacencies[set, , ] <-  abs(cor(multiExpr[[set]]$data, use = "p"))^softPower
  }

拓撲重疊的計算

接著我們把鄰接矩陣轉換成拓撲重疊矩陣,也就是計算一下我們常說的TOM班利。??

TOM <-  array(0, dim = c(nSets, nGenes, nGenes))

for (set in 1:nSets){
  TOM[set, , ] <-  TOMsimilarity(adjacencies[set, , ])
  }

給TOM做個scale

8.1 scale一下

不同數據集的TOM可能具有不同的統(tǒng)計特性饥漫,可能會導致偏差。??

為了讓兩個數據集有可比性罗标,我們需要做一下scale庸队。??

scaleP = 0.95
set.seed(12345)
nSamples = as.integer(1/(1-scaleP) * 1000)
scaleSample = sample(nGenes*(nGenes-1)/2, size = nSamples)
TOMScalingSamples = list()
scaleQuant = rep(1, nSets)
scalePowers = rep(1, nSets)

for (set in 1:nSets){
  TOMScalingSamples[[set]] = as.dist(TOM[set, , ])[scaleSample]
  scaleQuant[set] = quantile(TOMScalingSamples[[set]],
                             probs = scaleP, type = 8)

if (set>1){
  scalePowers[set] = log(scaleQuant[1])/log(scaleQuant[set])
  TOM[set, ,] = TOM[set, ,]^scalePowers[set]
}
  }

8.2 可視化scale效果

我們做個Q-Q plot來看下scale的效果吧。??

做完以后離參考線更近了闯割,當然這種變化比較小就是了彻消。??

scaledTOMSamples = list()

for (set in 1:nSets){
scaledTOMSamples[[set]] = TOMScalingSamples[[set]]^scalePowers[set]
}

sizeGrWindow(6,6)

qqUnscaled = qqplot(TOMScalingSamples[[1]], TOMScalingSamples[[2]], plot.it = T, cex = 0.6,
                    xlab = paste("TOM in", setLabels[1]), ylab = paste("TOM in", setLabels[2]),
                    main = "Q-Q plot of TOM", pch = 20)

qqScaled = qqplot(scaledTOMSamples[[1]], scaledTOMSamples[[2]], plot.it = FALSE)

points(qqScaled$x, qqScaled$y, col = "red", cex = 0.6, pch = 20);
abline(a=0, b=1, col = "blue")
legend("topleft", legend = c("Unscaled TOM", "Scaled TOM"), pch = 20, col = c("black", "red"))

共識拓撲重疊的計算

計算完成后,假設我們有一個基因在兩個數據集中表達宙拉,如何認為它是差異基因呢 ??

根據WGCNA中的解釋宾尚,如果這個基因在兩個數據集中差異都很大,這個時候我們才認為它是一個變化差異大的基因谢澈,就像達成共識一樣煌贴。??

consensusTOM = pmin(TOM[1, , ], TOM[2, , ])

聚類與模塊識別

10.1 計算模塊

consTree <-  hclust(as.dist(1-consensusTOM), method = "average")
minModuleSize <-  30
unmergedLabels <-  cutreeDynamic(dendro = consTree, distM = 1-consensusTOM,
                                 deepSplit = 2, cutHeight = 0.995,
                                 minClusterSize = minModuleSize,
                                 pamRespectsDendro = F)

unmergedColors <-  labels2colors(unmergedLabels)
table(unmergedLabels)

10.2 可視化

sizeGrWindow(8,6)

plotDendroAndColors(consTree, unmergedColors, "Dynamic Tree Cut",
                    dendroLabels = F, hang = 0.03,
                    addGuide = T, guideHang = 0.05)

10.3 計算模塊MEs

可以用于后面合并相似模塊哦。??

unmergedMEs <-  multiSetMEs(multiExpr, colors = NULL, universalColors = unmergedColors)

consMEDiss <-  consensusMEDissimilarity(unmergedMEs)

consMETree <-  hclust(as.dist(consMEDiss), method = "average")

10.4 可視化聚類結果

sizeGrWindow(7,6)
par(mfrow = c(1,1))

plot(consMETree, main = "Consensus clustering of consensus module eigengenes",
     xlab = "", sub = "")

abline(h=0.25, col = "red")

10.5 合并

merge <-  mergeCloseModules(multiExpr, unmergedLabels, cutHeight = 0.25, verbose = 3)

10.6 提取重要數據

moduleLabels <-  merge$colors
moduleColors <-  labels2colors(moduleLabels)
consMEs <-  merge$newMEs

10.7 最終可視化

sizeGrWindow(9,6)

plotDendroAndColors(consTree, cbind(unmergedColors, moduleColors),
                    c("Unmerged", "Merged"),
                    dendroLabels = F, hang = 0.03,
                    addGuide = T, guideHang = 0.05)

Save一下

老規(guī)矩锥忿,保存一下我們辛辛苦苦運行的數據吧牛郑。??

save(consMEs, moduleColors, moduleLabels, consTree, file = "./Consensus-NetworkConstruction-man.RData") 

<center>最后祝大家早日不卷!~</center>


點個在看吧各位~ ?.???? ??? ?

<center> <b>?? 往期精彩 <b> </center>

?? <font size=1>?? WGCNA | 值得你深入學習的生信分析方法!~</font>
?? <font size=1>?? ComplexHeatmap | 顏狗寫的高顏值熱圖代碼敬鬓!</font>
?? <font size=1>?? ComplexHeatmap | 你的熱圖注釋還擠在一起看不清嗎Q团蟆?</font>
?? <font size=1>?? Google | 谷歌翻譯崩了我們怎么辦6ご稹础芍?(附完美解決方案)</font>
?? <font size=1>?? scRNA-seq | 吐血整理的單細胞入門教程</font>
?? <font size=1>?? NetworkD3 | 讓我們一起畫個動態(tài)的桑基圖吧~</font>
?? <font size=1>?? RColorBrewer | 再多的配色也能輕松搞定数尿!~</font>
?? <font size=1>?? rms | 批量完成你的線性回歸</font>
?? <font size=1>?? CMplot | 完美復刻Nature上的曼哈頓圖</font>
?? <font size=1>?? Network | 高顏值動態(tài)網絡可視化工具</font>
?? <font size=1>?? boxjitter | 完美復刻Nature上的高顏值統(tǒng)計圖</font>
?? <font size=1>?? linkET | 完美解決ggcor安裝失敗方案(附教程)</font>
?? <font size=1>......</font>

本文由mdnice多平臺發(fā)布

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末仑性,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子右蹦,更是在濱河造成了極大的恐慌虏缸,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫩实,死亡現場離奇詭異刽辙,居然都是意外死亡,警方通過查閱死者的電腦和手機甲献,發(fā)現死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門宰缤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事慨灭‰Γ” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵氧骤,是天一觀的道長呻疹。 經常有香客問我,道長筹陵,這世上最難降的妖魔是什么刽锤? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮朦佩,結果婚禮上,老公的妹妹穿的比我還像新娘语稠。我一直安慰自己,他們只是感情好输涕,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慨畸,像睡著了一般占贫。 火紅的嫁衣襯著肌膚如雪先口。 梳的紋絲不亂的頭發(fā)上瞳收,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天碉京,我揣著相機與錄音,去河邊找鬼螟深。 笑死谐宙,一個胖子當著我的面吹牛界弧,可吹牛的內容都是我干的。 我是一名探鬼主播划栓,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼条获,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起堂油,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碧绞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后迫靖,有當地人在樹林里發(fā)現了一具尸體计维,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年蜈首,在試婚紗的時候發(fā)現自己被綠了欠母。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡踩寇,死狀恐怖,靈堂內的尸體忽然破棺而出俺孙,到底是詐尸還是另有隱情掷贾,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布场靴,位于F島的核電站港准,受9級特大地震影響,放射性物質發(fā)生泄漏浅缸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一阵谚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奠蹬,春花似錦嗡午、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吨拗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哨鸭,已是汗流浹背娇妓。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留只估,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓蛔钙,卻偏偏與公主長得像蓬戚,于是被迫代替她去往敵國和親宾抓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容