WGCNA 简明指南|1. 基因共表达网络构建及模块识别

  • 参考

  • 简介

  • 数据导入、清洗及预处理

    • 数据导入

    • 检查过度缺失值和离群样本

    • 载入临床特征数据

  • 自动构建网络及识别模块

    • 确定合适的软阈值:网络拓扑分析

    • 一步构建网络和识别模块

  • 往期

参考

本文主要参考官方指南Tutorials for WGCNA R package (ucla.edu),详细内容可参阅官方文档。

其它资料:

  1. WGCNA - 文集 - 简书 (jianshu.com)

  2. WGCNA分析,简单全面的最新教程 - 简书 (jianshu.com)

简介

加权基因共表达网络分析 (WGCNA, Weighted correlation network analysis)是用来描述不同样品之间基因关联模式的系统生物学方法,可以用来鉴定高度协同变化的基因集, 并根据基因集的内连性和基因集与表型之间的关联鉴定候补生物标记基因或治疗靶点。简而言之,就是将基因划分为若干个模块,探究表型数据与基因模块之间的相关关系,并找到模块中的hub基因

数据导入、清洗及预处理

数据导入

示例数据下载:https://horvath.genetics.ucla.edu/html/CoexpressionNetwork/Rpackages/WGCNA/Tutorials/FemaleLiver-Data.zip

# BiocManager::install("WGCNA")
library('WGCNA')
# 在读入数据时,遇到字符串之后,不将其转换为factors,仍然保留为字符串格式
options(stringsAsFactors = FALSE)
# 导入示例数据
femData = read.csv("LiverFemale3600.csv")
# 查看数据
dim(femData)
names(femData)
> dim(femData)
[1] 3600  143> names(femData)[1] "substanceBXH"   "gene_symbol"    "LocusLinkID"    "ProteomeID"    [5] "cytogeneticLoc" "CHROMOSOME"     "StartPosition"  "EndPosition"   [9] "F2_2"           "F2_3"           "F2_14"          "F2_15"  ...
# 提取样本-基因表达矩阵
datExpr0 = as.data.frame(t(femData[, -c(1:8)]))
names(datExpr0) = femData$substanceBXH
rownames(datExpr0) = names(femData)[-c(1:8)]
> datExpr0[1:6,1:6]MMT00000044 MMT00000046 MMT00000051 MMT00000076 MMT00000080 MMT00000102
F2_2   -0.0181000     -0.0773 -0.02260000    -0.00924 -0.04870000  0.17600000
F2_3    0.0642000     -0.0297  0.06170000    -0.14500  0.05820000 -0.18900000
F2_14   0.0000644      0.1120 -0.12900000     0.02870 -0.04830000 -0.06500000
F2_15  -0.0580000     -0.0589  0.08710000    -0.04390 -0.03710000 -0.00846000
F2_19   0.0483000      0.0443 -0.11500000     0.00425  0.02510000 -0.00574000
F2_20  -0.1519741     -0.0938 -0.06502607    -0.23610  0.08504274 -0.01807182

检查过度缺失值和离群样本

# 检查缺失值太多的基因和样本
gsg = goodSamplesGenes(datExpr0, verbose = 3);
gsg$allOK

如果最后一个语句返回TRUE,则所有的基因都通过了检查。如果没有,我们就从数据中剔除不符合要求的基因和样本。

if(!gsg$allOK)
{#(可选)打印被删除的基因和样本名称:if(sum(!gsg$goodGenes)>0)printFlush(paste("Removinggenes:",paste(names(datExpr0)[!gsg$goodGenes], collapse =",")));if(sum(!gsg$goodSamples)>0)printFlush(paste("Removingsamples:",paste(rownames(datExpr0)[!gsg$goodSamples], collapse =",")));#删除不满足要求的基因和样本:datExpr0 = datExpr0[gsg$goodSamples, gsg$goodGenes]
}

接下来,我们对样本进行聚类(与稍后的聚类基因相反),看看是否有任何明显的异常值

sampleTree = hclust(dist(datExpr0), method ="average");
# 绘制样本树:打开一个尺寸为12 * 9英寸的图形输出窗口
# 可对窗口大小进行调整
sizeGrWindow(12,9)
# 如要保存可运行下面语句
# pdf(file="Plots/sampleClustering.pdf",width=12,height=9);
par(cex = 0.6)
par(mar =c(0,4,2,0))
plot(sampleTree, main ="Sampleclusteringtodetectoutliers",sub="", xlab="", cex.lab = 1.5,
cex.axis= 1.5, cex.main = 2)

Fig1a.样本树状图

Fig1a可见有一个异常值。可以手动或使用自动方法删除它。选择一个**高度(height)**进行切割将删除异常样本,比如15(Fig1b),并在该高度使用分支切割

# 绘制阈值切割线
abline(h = 15,col="red");
# 确定阈值线下的集群
clust = cutreeStatic(sampleTree, cutHeight = 15, minSize = 10)
table(clust)
# clust1包含想要留下的样本.
keepSamples = (clust==1)
datExpr = datExpr0[keepSamples, ]
nGenes =ncol(datExpr)
nSamples =nrow(datExpr)

Fig1b.红线表示切割高度

datExpr包含用于网络分析的表达数据。

载入临床特征数据

将样本信息与临床特征进行匹配。

traitData =read.csv("ClinicalTraits.csv")
dim(traitData)
names(traitData)
# 删除不必要的列.
allTraits = traitData[, -c(31, 16)]
allTraits = allTraits[,c(2, 11:36) ]
dim(allTraits)
names(allTraits)
# 形成一个包含临床特征的数据框
femaleSamples =rownames(datExpr)
traitRows =match(femaleSamples, allTraits$Mice)
datTraits = allTraits[traitRows, -1]
rownames(datTraits) = allTraits[traitRows, 1]
collectGarbage() # 释放内存

现在在variabledatExpr中有了表达数据,在变量datTraits中有了相应的临床特征。在进行网络构建和模块检测之前,将临床特征与样本树状图的关系可视化。

# 重新聚类样本
sampleTree2 = hclust(dist(datExpr), method ="average")
# 将临床特征值转换为连续颜色:白色表示低,红色表示高,灰色表示缺失
traitColors = numbers2colors(datTraits, signed = FALSE);
# 在样本聚类图的基础上,增加临床特征值热图
plotDendroAndColors(sampleTree2, traitColors,groupLabels =names(datTraits),main ="Sample dendrogramand trait heatmap")

Figure 2: Clustering dendrogram of samples based on their Euclidean distance.

自动构建网络及识别模块

确定合适的软阈值:网络拓扑分析

The soft thresholding, is a value used to power the correlation of the genes to that threshold. The assumption on that by raising the correlation to a power will reduce the noise of the correlations in the adjacency matrix. To pick up one threshold use the pickSoftThreshold function, which calculates for each power if the network resembles to a scale-free graph. The power which produce a higher similarity with a scale-free network is the one you should use.

WGCNA: What is soft thresholding? (bioconductor.org)

# 设置软阈值调参范围
powers =c(c(1:10),seq(from = 12, to=20,by=2))
# 网络拓扑分析
sft = pickSoftThreshold(datExpr, powerVector = powers, verbose = 5)
# 绘图
sizeGrWindow(9, 5)
# 1行2列排列
par(mfrow =c(1,2));
cex1 = 0.9;
# 无标度拓扑拟合指数与软阈值的函数(左图)
plot(sft$fitIndices[,1], -sign(sft$fitIndices[,3])*sft$fitIndices[,2],xlab="SoftThreshold(power)",ylab="ScaleFreeTopologyModelFit,signedR^2",type="n",main =paste("Scaleindependence"));
text(sft$fitIndices[,1], -sign(sft$fitIndices[,3])*sft$fitIndices[,2],labels=powers,cex=cex1,col="red");
# 这条线对应于h的R^2截止点
abline(h=0.90,col="red")
# Mean Connectivity与软阈值的函数(右图)
plot(sft$fitIndices[,1], sft$fitIndices[,5],xlab="SoftThreshold(power)",ylab="MeanConnectivity", type="n",main =paste("Meanconnectivity"))
text(sft$fitIndices[,1], sft$fitIndices[,5],labels=powers, cex=cex1,col="red")

Figure 3:各种软阈值的网络拓扑分析

我们选择power 6,这是无标度拓扑拟合指数曲线在达到较高值时趋于平缓的最低 power。

一步构建网络和识别模块

net = blockwiseModules(datExpr,power= 6,TOMType ="unsigned", minModuleSize = 30,reassignThreshold = 0, mergeCutHeight = 0.25,numericLabels = TRUE, pamRespectsDendro = FALSE,saveTOMs = TRUE,saveTOMFileBase ="femaleMouseTOM",verbose = 3)
  • deepSplit 参数调整划分模块的敏感度,值越大,越敏感,得到的模块就越多,默认是2;

  • minModuleSize 参数设置最小模块的基因数,值越小,小的模块就会被保留下来;

  • mergeCutHeight 设置合并相似性模块的距离,值越小,就越不容易被合并,保留下来的模块就越多

# 查看识别了多少模块以及模块大小
table(net$colors)
> table(net$colors)0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18 99 609 460 409 316 312 221 211 157 123 106 100  94  91  77  76  58  47  34

表明有18个模块,按大小递减顺序标记为1到18,大小从609到34个基因。标签0为所有模块之外的基因。

# 可视化模块
sizeGrWindow(12, 9)
# 将标签转换为颜色
mergedColors = labels2colors(net$colors)
# 绘制树状图和模块颜色图
plotDendroAndColors(net$dendrograms[[1]], mergedColors[net$blockGenes[[1]]],"Modulecolors",dendroLabels = FALSE, hang = 0.03,addGuide = TRUE, guideHang = 0.05)

Figure 4:基因的聚类树状图,具有不同的基于拓扑重叠,以及指定的模块颜色

保存模块赋值和模块特征基因信息,以供后续分析。

moduleLabels = net$colors
moduleColors = labels2colors(net$colors)
MEs = net$MEs;
geneTree = net$dendrograms[[1]];
save(MEs, moduleLabels, moduleColors, geneTree,file="FemaleLiver-02-networkConstruction-auto.RData")

往期

  1. 跟着Nature学作图 | 配对哑铃图+分组拟合曲线+分类变量热图

  2. (免费教程+代码领取)|跟着Cell学作图系列合集

  3. 跟着Nat Commun学作图 | 1.批量箱线图+散点+差异分析

  4. 跟着Nat Commun学作图 | 2.时间线图

  5. 跟着Nat Commun学作图 | 3.物种丰度堆积柱状图

  6. 跟着Nat Commun学作图 | 4.配对箱线图+差异分析


WGCNA 简明指南|1. 基因共表达网络构建及模块识别相关推荐

  1. 构建基因共表达网络鉴定CD8 T细胞浸润相关生物标志物在肾透明细胞癌中的作用

    构建基因共表达网络鉴定CD8 T细胞浸润相关生物标志物在肾透明细胞癌中的作用 文章目录 构建基因共表达网络鉴定CD8 T细胞浸润相关生物标志物在肾透明细胞癌中的作用 文献信息 背景和目的 实验流程 方 ...

  2. R包WGCNA---转录组WGCNA共表达网络构建(基本概念)

    R包WGCNA---转录组WGCNA共表达网络构建(基本概念) 1. WGCNA简介 2. WGCNA分析原理 (1)R包WGCNA的主要功能 (2)WGCNA的基本概念和工作流程 (3)WGCNA分 ...

  3. R包WGCNA---转录组WGCNA共表达网络构建(无表型计算提取网络)

    R包WGCNA---转录组WGCNA共表达网络构建(无表型信息) 1. 下载R包WGCNA 2. 运行步骤 2.1参数筛选和模块计算 2.2 全部基因所属模块信息输出 2.3 计算KME值并输出筛选基 ...

  4. WGCNA构建基因共表达网络详细教程

    这篇文章更多的是对于混乱的中文资源的梳理,并补充了一些没有提到的重要参数,希望大家不会踩坑. 1. 简介 1.1 背景 WGCNA(weighted gene co-expression networ ...

  5. WGCNA 简明指南|2. 模块与性状关联分析并识别重要基因

    WGCNA 简明指南|2. 模块与性状关联分析并识别重要基因 WGCNA 系列 WGCNA 简明指南|1. 基因共表达网络构建及模块识别 WGCNA 系列 参考 关联模块与临床特征 量化module- ...

  6. WGCNA 简明指南|3.使用WGCNA实现网络可视化

    WGCNA 简明指南|3.使用WGCNA实现网络可视化 WGCNA 系列 WGCNA 简明指南|1. 基因共表达网络构建及模块识别 WGCNA 简明指南|2. 模块与性状关联分析并识别重要基因 WGC ...

  7. WGCNA加权基因共表达网络分析(1)简介、原理

    WGCNA简介 WGCNA(Weighted Gene Co-Expression Network Analysis, 加权基因共表达网络分析),鉴定表达模式相似的基因集合(module),解析基因集 ...

  8. 基因共表达网络分析java,WGCNA:加权基因共表达网络分析

    加权基因表达网络分析(Weighted gene co-expression network analysis, WGCNA),又叫权重基因共表达网络分析,其根本思想是根据基因表达模式的不同,挖掘出相 ...

  9. 基因共表达网络分析java,基因共表达网络分析-WGCNA

    今天推荐给大家一个R包WGCNA,针对我们的表达谱数据进行分析. 简单介绍:WGCNA首先假定基因网络服从无尺度分布,并定义基因共表达相关矩阵.基因网络形成的邻接函数,然后计算不同节点的相异系数,并据 ...

最新文章

  1. c语言socket实现ftp,C++ socket实现miniFTP
  2. 发现 4 个 Python 命令行可视化库,又酷又炫!
  3. golang大量字符串拼接方法
  4. 使用iframe模拟无刷新上传文件。
  5. 带你全面认识 Linux
  6. Type Casting
  7. python讲解-详解python中@的用法
  8. php-5.4 升级到 php7.2
  9. python集合操作班级干部竞选演讲稿_【热门】竞选班干部演讲稿集合8篇
  10. linux看门狗定时器,看门狗定时器的作用
  11. JS 进阶 (六) 浏览器事件模型DOM操作
  12. 爬在NLP的大道上——Question Answering Infused Pre-training of General-Purpose Contextualized Representations
  13. 拍立淘-以图搜图中的图像搜索算法
  14. uniapp页面导出pdf
  15. 查看tmp目录下的文件
  16. windows 技术篇 - 远程访问服务器空白桌面问题解决方法
  17. HarmonyOS流畅度,harmonyos系统
  18. 【笔记整理】通信原理第九章复习——循环码
  19. java设计程序实验报告,实验报告一
  20. flask 动态模板html,HTML|Flask之模板继承

热门文章

  1. python 摸索(二) 让我爱上python的一句1000阶乘代码
  2. fetch 请求详解
  3. VB.NET学习笔记:ADO.NET操作ACCESS数据库——使用OleDbDataReader对象
  4. Fascinating sort c语言 小悦是个聪明学生,给一个长度为N
  5. php单页程序,动态php单页站群源码,泛解析单页循环暴力域名站群系统
  6. 【15个win8实用技巧 轻松玩转windows8操作系统】
  7. VirtualBox下安装Mac OS X系统
  8. Unreal Open Day 2017 参会总结——腾讯逆战游戏项目制作经验分享
  9. 多进程及多线程的区别
  10. TypeScript declare