如果(!requireNamespace('BiocManager', quiet = TRUE) install.packages('BiocManager') BiocManager::install("BioNERO")
#加载包后安装库(BioNERO) set.seed(12) #重现性
比较不同的共表达网络可以揭示相关的生物学模式。例如,寻找共识的模块可以识别在所有数据集中出现的共表达模块,而不考虑自然变异,因此,是所研究表型的核心参与者。此外,模块保存物种内部和物种间可以揭示转录组之间的保守和差异模式。在这篇短文中,我们将探索共识模块和模块保存分析BioNERO
.尽管它们看起来很相似,但它们的目标是相反的:共识模块识别侧重于共性,而模块保存则侧重于差异。
我们将使用玉米的RNA-seq数据(玉米)和米(栽培稻)从Shin等人(2020).
数据(zma.se) zma。se ##类:summarizeexperiment ## dim: 10802 28 ##元数据(0):## assays(1):“## rownames(10802): ZeamMp030 ZeamMp044…Zm00001d054106 Zm00001d054107 ## rowData names(0): ## colnames(28): SRX339756 SRX339757…SRX2792103 SRX2792104 ## colData names():组织数据(osa.se) osa。se ##类:summarizeexperiment ## dim: 7647 27 ##元数据(0):## assays(1): " ## rownames(7647): Os01g0100700 Os01g0100900…Os12g0641400 Os12g0641500 ## rowData names(0): ## colnames(27): SRX831140 SRX831141…SRX263041 SRX1544234 ## colData名称(1):组织
所有BioNERO
的一致性模块和模块保存分析函数要求表达式数据在一个列表.列表的每个元素可以是summarizeexperiment对象(推荐),也可以是一个表达式数据帧,其行名为基因,列名为样本。
共识模块识别的最常见目标是在同一物种的不同组织或处理中找到核心模块。例如,人们可以推断出人类组织中不同类型癌症(如前列腺癌和肝癌)的GCNs,并确定在所有集合中出现的模块,这些模块可能是癌症生物学的核心组成部分。同样,人们也可以在来自不同地理来源的样本中识别共识模块,以找到不受群体结构或亲缘关系影响的模块。
在这里,我们将从玉米数据中随机抽取22个样本进行两次子集,并在两个集合之间找到共识模块。
#预处理数据,并保留前2000个方差最高的基因filt_zma <- exp_预处理(zma。se, variance_filter = TRUE, n = 2000)zma_set1 <- filt_zma[, sample(colnames(filt_zma), size=22, replace=FALSE)] zma_set2 <- filt_zma[, sample(colnames(filt_zma), size=22,replace=FALSE)] colnames(zma_set1) ##[6]“SRX3804716”“SRX2792102”“SRX2527287”“SRX2792108”“SRX3804723”##[6]“SRX2792107”“SRX2792103”“SRX2792104”“SRX3804715”“SRX339808”“srx33978”##[11]“SRX339758”“SRX339756”“SRX339809”“SRX2792105”“SRX339757”##[16]“SRX2641029”“SRX339762”“srx3392110”“SRX339807”“srx339718”##[21]“ERX2154032”“SRX339764”colnames(zma_set2) ##[1]“SRX2792111”“SRX339756”“srx339715”“SRX2792108”“SRX2792103”##[6]“SRX339762”“srx339715”“SRX2792108”“SRX2792103”“SRX2792107”##[11]“SRX2527287”“ERX2154032”“SRX2792104”“SRX2527288”“SRX339809”##[16]“SRX3804718”“SRX3804716”“SRX2792109”“SRX3804723”“SRX2792102”##[21]“SRX339808”“SRX339758”#创建列表zma_list <- list(set1 = zma_set1, set2 = zma_set2) length(zma_list) ## [1] 2 . ## SRX2792107”
正如在第一个小插图中所描述的,在推断GCNs之前,我们需要确定最优β\ (\ \)使网络更接近无标度拓扑的功率。我们可以用consensus_SFT_fit ()
.
con_sft <- consensus_SFT_fit(zma_list, setLabels = c("Maize 1", "Maize 2"), cor_method = "pearson") ## Power SFT.R.sq slope truncted . r.s q mean.k。median.k。max.k。5 # # 1 0.658 -0.650 0.656 107.00 90.50 - 304.0 # # 2 6 0.761 -0.706 0.774 79.70 62.90 - 244.0 # # 3 7 0.833 -0.757 0.863 61.30 45.10 - 200.0 # # 4 8 0.825 -0.830 0.868 48.30 32.80 - 169.0 # # 5 9 0.822 -0.916 0.887 38.70 24.50 - 145.0 # # 6 10 0.838 -0.975 0.910 31.50 18.90 - 126.0 # # 7 11 0.824 -1.040 0.914 26.00 15.00 - 111.0 # # 8 12 0.837 -1.090 0.932 21.70 12.20 - 97.6 # # 9 13 0.851 -1.130 0.944 18.30 10.10 - 86.6 # # 10 14 0.842 -1.190 0.941 15.50 8.42 - 77.3 # # 11 15 0.844 -1.230 0.947 13.30 7.17 - 69.4 # # 12 160.842 -1.270 0.951 11.50 6.13 62.5 ## 13 17 0.855 -1.300 0.962 9.99 5.24 56.5 ## 14 18 0.864 -1.320 0.967 8.73 4.54 51.3 ## 15 19 0.869 -1.330 0.970 7.67 3.92 46.7 # 16 20 0.875 -1.340 0.977 6.78 3.38 42.7 ## Power sft . r.s sq斜率截断。r.s sq mean.k。median.k。max.k。5 # # 1 0.592 -0.621 0.574 94.70 82.40 - 265.0 # # 2 6 0.702 -0.666 0.710 69.90 56.80 - 209.0 # # 3 7 0.757 -0.713 0.771 53.20 40.30 - 167.0 # # 4 8 0.829 -0.729 0.853 41.50 29.50 - 136.0 # # 5 9 0.855 -0.782 0.884 32.90 22.10 - 113.0 # # 6 10 0.868 -0.826 0.911 26.60 17.20 - 96.6 # # 7 11 0.873 -0.868 0.931 21.80 13.70 - 83.2 # # 8 12 0.837 -0.943 0.914 18.10 11.30 - 73.0 # # 9 13 0.826 -1.000 0.917 15.20 9.30 - 64.7 # # 10 14 0.815 -1.070 0.917 12.80 7.73 - 57.6 # # 11 15 0.810 -1.120 0.926 11.00 0.823 6.53 51.5 # # 12 16-1.150 0.943 9.42 5.45 46.3 ## 13 17 0.815 -1.210 0.942 8.16 4.57 41.8 ## 14 18 0.827 -1.240 0.954 7.11 3.92 37.8 ## 15 19 0.833 -1.260 0.964 6.23 3.42 34.3 ## 16 20 0.831 -1.280 0.965 5.49 2.99 31.2
这个函数返回一个最优幂的列表和一个汇总图SFT_fit ()
所做的事。
Powers <- con_sft $power Powers ## set1 set2 ## 7 8 con_sft $plot
现在,我们可以推断GCNs并识别跨数据集的共识模块。
Consensus <- consensus_modules(zma_list, power = powers, cor_method = "pearson") ## .connectivity..# # . .矩阵乘法(系统BLAS)..# # . .正常化. .# # . .。# # . .连接. .# # . .矩阵乘法(系统BLAS)..# # . .正常化. .# # . .。 ## ..done. ## multiSetMEs: Calculating module MEs. ## Working on set 1 ... ## Working on set 2 ... names(consensus) ## [1] "consModules" "consMEs" "exprSize" ## [4] "sampleInfo" "genes_cmodules" "dendro_plot_objects" head(consensus$genes_cmodules) ## Genes Cons_modules ## 1 ZeamMp030 royalblue ## 2 ZeamMp044 darkred ## 3 ZeamMp092 darkred ## 4 ZeamMp108 saddlebrown ## 5 ZeamMp116 darkred ## 6 ZeamMp158 saddlebrown
最后,我们可以将共识模块特征基因与样本元数据(这里是植物组织)关联起来。1注意:热图中的空白灰色单元格表示在表达式集中具有相反符号的相关值。对于每个相关对,通过选择共识模块-特征相关性矩阵的最小值来计算共识相关性。
Consensus_trait <- consensus_trait_cor(consensus, cor_method = "pearson")
head(consensus_trait) ## ME trait cor pvalue ## 1 MEblack胚乳-0.297224435 0.1815879 ## 2 MEblack花粉0.284525339 0.2021641 ## 3 MEblack whole_苗0.007301901 0.9746086 ## 4 MEblue胚乳-0.164695363 0.4687656 ## 5 MEblue花粉0.295979347 0.1835410 ## 6 MEblue whole_苗-0.016437184 0.9428769
用户还可以调换热图module_trait_cor ()
.
模块保存通常用于研究转录组间的进化保护和分化模式,这种方法被命名为phylotranscriptomics.通过这种方式,人们可以研究进化是如何在分类单元中形成特定基因家族的表达谱的。
为了计算模块保存统计信息,基因id必须由表达集共享。对于种内比较来说,这是一项简单的任务,因为基因id是相同的。然而,对于种间比较,用户需要识别不同物种之间的原类群,并将基因水平的表达值分解为原类群水平的表达值。这样,所有表达式集都将具有公共行名。我们建议用OrthoFinder(Emms and Kelly 2015),使用简单,应用广泛。2专家提示:如果你用OrthoFinder,BioNERO
是否有一个名为parse_orthofinder ()
解析Orthogroups.tsv由OrthoFinder生成的文件转换成适合模块保存分析的数据帧。看到parse_orthofinder ?
欲知详情。在这里,我们将比较玉米和水稻的表达谱。这些种间的正交类群从PLAZA 4.0 Monocots数据库下载(Van Bel et al. 2018).
data(org .zma.osa) head(org .zma.osa) ##科种基因## 1548 ORTHO04M000001 osa Os01g0100700 ## 1549 ORTHO04M000001 zma Zm00001d009743 ## 4854 ORTHO04M000001 zma Zm00001d020834 ## 4874 ORTHO04M000001 zma Zm00001d026672 ## 4921 ORTHO04M000001 zma Zm00001d039873
如你所见,正交组对象BioNERO
必须是分别具有正交群、物种id和基因id的数据帧。让我们把基因水平的表达分解到与exp_genes2orthogroups ()
.默认情况下,如果给定物种的同一正群中有多个基因,则它们的表达水平汇总到中位数。用户也可以总结为平均值。
zma_osa_list <- list(osa = osa. list)#将基因级表达式折叠为orthogroup-level的ortho_exp <- exp_genes2orthogroups(zma_osa_list, og.zma. se) #osa, summary = "mean") #检查新的表达式数据ortho_exp$osa[1:5, 1:5] ## SRX831140 SRX831141 SRX831137 SRX831138 SRX831134 ## ORTHO04M000001 6.909420 7.258330 94.20870 92.85195 123.01060 ## ORTHO04M000002 9.203498 8.709974 66.45512 44.97913 33.86936 ## ORTHO04M000003 9.417930 9.444861 42.57513 66.02237 55.37741 ## ORTHO04M000004 9.019436 8.920091 96.22074 62.56506 109.32262 ## ORTHO04M000005 40.845040 41.844234 52.33474 31.31474 22.42236 ortho_exp$zma[1:5,1:5] ## srx339756 srx339757 srx339758 srx339762 srx339763 ## ortho04m000001 26.02510 15.07917 14.91571 8.080489 8.080476 ## ortho04m000003 45.17294 48.63796 54.22404 42.12135 10.779117 ## ortho04m000004 28.05475 38.53734 39.48070 27.13272 2.978207 ## ortho04m000005 67.58868 34.87009 21.46280 12.79565 7.452068
现在,我们将对这两个表达式集进行预处理,并仅保留具有最高方差的前1000个正交群用于演示。
#预处理数据,保留方差最高的前1000个基因ortho_exp <- lapply(ortho_exp, exp_预处理,variance_filter=TRUE, n=1000) ##移除样本数量:2 ##移除样本数量:2 #检查orthogroup Number sapply(ortho_exp, nrow) ## osa zma ## # 1000 1000
现在行名是可比较的,我们可以推断每个集合的GCNs。我们将用lapply迭代完成。
#计算SFT功率power_ortho <- lapply(ortho_exp, SFT_fit, cor_method="pearson") ##计算SFT功率。median.k。max.k。# # 1 3 0.00503 -0.174 0.792 196.00 196.00 - 277.0 # # 2 4 0.10300 -0.767 0.874 133.00 131.00 - 210.0 # # 3 5 0.15600 -0.861 0.903 94.40 92.90 - 165.0 # # 4 6 0.18900 -0.873 0.929 69.90 68.30 - 132.0 # # 5 7 0.22000 -0.936 0.915 53.40 51.70 - 109.0 # # 6 8 0.32100 -1.070 0.918 41.90 40.10 - 90.9 # # 7 9 0.35400 -1.030 0.903 33.60 31.70 - 77.0 # # 8 10 0.39800 -0.991 0.909 27.50 25.50 - 66.0 # # 9 11 0.46900 -0.997 0.914 22.80 20.90 - 57.2 # # 10 12 0.51800 -0.969 0.917 19.20 17.30 - 50.0 # # 11 13 0.58400 -0.944 0.935 16.4014.50 44.1 ## 12 14 0.66000 -0.913 0.969 14.20 12.50 39.3 ## 13 15 0.70900 -0.906 0.977 12.30 10.60 35.5 ## 14 16 0.76000 -0.920 0.983 10.80 9.14 32.2 ## 15 17 0.77900 -0.945 0.929 9.57 7.79 29.3 ## 16 18 0.81000 -0.954 0.938 8.52 6.81 26.9 # 17 19 0.82600 -0.972 0.954 7.64 5.97 25.1 # 18 20 0.84700 -1.000 0.954 6.88 5.26 23.6 ## Power SFT.R.sq斜率truncatedr .sq mean.k。median.k。max.k。# # 1 3 0.6910 0.7290 0.6260 269.0 284.0 - 407.0 # # 2 4 0.4540 0.3460 0.3270 199.0 209.0 - 329.0 # # 3 5 0.0802 0.1070 -0.0486 153.0 158.0 - 273.0 # # 4 6 0.0459 -0.0746 -0.0302 121.0 123.0 - 233.0 # # 5 7 0.2620 -0.2140 0.3480 98.1 97.1 - 201.0 # # 6 8 0.4070 -0.3270 0.4820 80.7 78.1 - 176.0 # # 7 9 0.5030 -0.4180 0.5960 67.4 63.4 - 155.0 # # 8 10 0.4930 -0.4950 0.5950 57.0 52.5 - 138.0 # # 9 11 0.5730 -0.5520 0.6790 48.8 43.8 - 124.0 # # 10 12 0.5770 -0.6090 0.6860 42.1 37.2 - 112.0 # # 11 13 0.6560 -0.6500 0.7490 36.731.6 - 101.0 # # 12 14 0.6740 -0.7010 0.7630 32.2 27.5 - 92.1 # # 13 15 0.7240 -0.7330 0.7930 28.4 23.8 - 84.2 # # 14 16 0.7800 -0.7460 0.8470 25.3 20.6 - 77.3 # # 15 17 0.8330 -0.7540 0.9060 22.6 18.0 - 71.2 # # 16 18 0.8560 -0.7740 0.9200 20.3 15.8 - 65.7 # # 17 19 0.8690 -0.7870 0.9320 18.3 13.9 - 60.9 # # 18 20 0.8810 -0.8120 0.9240 16.6 12.3 - 56.6 #推断gcn gcn < -拉普(seq_along (power_ortho)、功能(n) exp2gcn (ortho_exp [[n]], SFTpower = power_ortho [[n]],美元Cor_method = "pearson") ## ..connectivity.. ## ..matrix multiplication (system BLAS).. ## ..normalization.. ## ..done. ## ..connectivity.. ## ..matrix multiplication (system BLAS).. ## ..normalization.. ## ..done. length(gcns) ## [1] 2
最初,使用WGCNA算法进行模块保存分析(Langfelder and Horvath 2008).然而,WGCNA使用的摘要保存统计数据依赖于通常不符合的参数假设。为此,采用NetRep算法(Ritchie et al. 2016)比WGCNA更准确,因为它使用了非参数排列分析。两种算法都在BioNERO
为了比较,但是我们强烈推荐使用NetRep算法。模块保存分析可以通过一个函数执行:module_preservation ()
.
#以水稻为参考,以玉米为测试pres <- module_preservation(ortho_exp, ref_net = gcns[[1]], test_net = gcns[[2]], algorithm = "netrep") ## [2022-09-04 15:58:23 EDT]验证用户输入…##[2022-09-04 15:58:23东部时间]检查矩阵的问题…## [2022-09-04 15:58:24 EDT] Input ok!##[2022-09-04 15:58:24东部时间]计算数据集“zma”中##数据集“osa”的网络子集的保存。##[2022-09-04 15:58:24东部时间]预计算数据集##“osa”中的网络属性…##[2022-09-04 15:58:25东部时间]计算观察到的测试统计数据…## [2022-09-04 15:58:25 EDT]用一个线程从1000 ##排列生成空分布…## ## 0%完成。100%完成。## ## [2022-09-04 15:58:26 EDT]计算p值… ## [2022-09-04 15:58:26 EDT] Collating results... ## [2022-09-04 15:58:29 EDT] Done! ## None of the modules in osa were preserved in zma.
水稻中的所有模块在玉米中都没有保存下来。这可能是由于我们选择的正群数量较少,也可能是由于物种和样本组织之间的自然生物变异。你可以(也应该)在你的分析中加入更多的原基,以便更好地了解物种之间的转录保护。
最后,BioNERO
能识别单子和复制基因吗is_singleton ()
.该函数返回逻辑向量,指示每个输入基因是否为单例。
# Sample (rownames(zma.se), size = 50) is_singleton(基因,g.zma.osa) ## Zm00001d000197 Zm00001d001896 Zm00001d003679 Zm00001d006415 Zm00001d006620 ##真真真真真## Zm00001d007888 Zm00001d008739 Zm00001d009221 Zm00001d009221 zm00001d00970 Zm00001d010720 ##真真真真真## Zm00001d010927 Zm00001d011507 Zm00001d012863 Zm00001d013362 Zm00001d013907 ##真真真真真## Zm00001d014073 Zm00001d014766 Zm00001d014957 Zm00001d015415 Zm00001d017114 ## Zm00001d017960 Zm00001d018894 Zm00001d019125 Zm00001d021180Zm00001d021659 # #真的真的真的真的真的# # Zm00001d025178 Zm00001d026239 Zm00001d029557 Zm00001d030166 Zm00001d030184 # #真的真的真的真的真的# # Zm00001d031062 Zm00001d032346 Zm00001d032520 Zm00001d032565 Zm00001d033110 # #真的真的真的真的真的# # Zm00001d033186 Zm00001d034180 Zm00001d035772 Zm00001d035933 Zm00001d037420 # #真的真的真的真的真的# # Zm00001d037544 Zm00001d037573 Zm00001d038248 Zm00001d038519 Zm00001d041789 # #真的真的真的真的真的# # Zm00001d047354 Zm00001d050193Zm00001d051188 Zm00001d052941 Zm00001d053189 ##真真真真真
这个小插图是在以下条件下创建的:
## R版本4.2.1(2022-06-23)##平台:x86_64-pc-linux-gnu(64位)##运行在:Ubuntu 20.04.4 LTS ## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.16-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.16-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_GB LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats graphics grDevices utils datasets methods基础## ##其他附加包:## [1]BioNERO_1.5.2 BiocStyle_2.25.0 ## ##通过命名空间加载(且未附加):## [1] backports_1.4.1 circlize_0.4.15 ## [3] Hmisc_4.7-1 plyr_1.8.7 ## [5] igraph_1.3.4 splines_4.2.1 ## [9] GenomeInfoDb_1.33.5 ggnetwork_0.5.10 ## [11] ggplot2_3.3.6 sva_3.45.0 ## [13] digest_0.6.29 foreach_1.5.2 ## [15] htmltools_0.5.3 magick_2.7.3 ## [17] GO.db_3.15.0 fansi_1.0.3 ## [21] memoise_2.0.1 cluster_2.1.4 ## [23] doParallel_1.0.17 limma_3.53.6 ## [27]Biostrings_2.65.3 annotate_1.75.0 # # [29] matrixStats_0.62.0 jpeg_0.1-9 # # [31] colorspace_2.0-3 blob_1.2.3 # # [33] ggrepel_0.9.1 xfun_0.32 # # [35] dplyr_1.0.10 crayon_1.5.1 # # [37] rcurl_1.98 - 1.8 jsonlite_1.8.0 # # [39] genefilter_1.79.0 impute_1.71.0 # # [41] survival_3.4-0 iterators_1.0.14 # # [43] glue_1.6.2 gtable_0.3.1 # # [45] zlibbioc_1.43.0 XVector_0.37.1 # # [47] GetoptLong_1.0.5 DelayedArray_0.23.1 # # [49] shape_1.4.6 BiocGenerics_0.43.1 # # [51] abind_1.4-5 scales_1.2.1 # # [53]edgeR_3.39.6 DBI_1.1.3 ## [55] Rcpp_1.0.9 xtable_1. 4 ## [57] htmlTable_2.4.1 clue_0.3-61 ## [59] foreign_0.8-82 bit_4.0.4 ## [61] preprocessCore_1.59.0 Formula_1.2-4 ## [63] stats4_4.2.1 htmlwidgets_1.5.4 ## [65] httr_1.4.4 RColorBrewer_1.1-3 ## [67] farver_2.1.1 pkgconfig_2.0.3 ## [69] XML_3.99-0.10 nnet_7.3-17 ## [71] sass_0.4.2 deldir_1.0-6 ## [73] locfit_1. 1.5-9.6 utf8_1.2.2 ## [77] tidyselect_1.1.2 rlang_1.0.5 ## [79] reshape2_1.4.4AnnotationDbi_1.59.1 ## [81] munsell_0.5.0 tools_4.2.1 ## [83] cachem_1.0.6 cli_3.3.0 ## [85] generics_0.1.3 RSQLite_2.2.16 ## [89] statnet.common_4.6.0 evaluate_0.16 ## [91] yaml_2.3.5 RhpcBLASctl_0.21-247.1 ## [93] knitr_1.40 bit64_4.0.5 ## [95] purrr_0.3.4 KEGGREST_1.37.3 ## [97] nlme_1 . 3.1-159 compiler_4.2.1 ## [99] rstudioapi_0.14 png_0.1-7 ## [101] minet_3.55.0 tibble_3.1.8 ## [103] statmod_1.4.37 bslib_0.4.0 ## [107]lattice_0.20-45 Matrix_1.4-1 # # [109] vctrs_0.4.1 pillar_1.8.1 # # [111] lifecycle_1.0.1 networkD3_0.4 # # [113] BiocManager_1.30.18 jquerylib_0.1.4 # # [115] GlobalOptions_0.1.2 data.table_1.14.2 # # [117] bitops_1.0-7 patchwork_1.1.2 # # [119] GenomicRanges_1.49.1 R6_2.5.1 # # [121] latticeExtra_0.6-30 bookdown_0.28 # # [123] network_1.17.2 gridExtra_2.3 # # [125] IRanges_2.31.2 codetools_0.2-18 # # [127] assertthat_0.2.1 SummarizedExperiment_1.27.2 # # [129] rjson_0.2.21 S4Vectors_0.35.3 # # [131] GenomeInfoDbData_1.2.8 intergraph_2.0-2 ## [133] mgcv_1.8-40 parallel_4.2.1 ## [135] grid_4.2.1 rpart_4.1.16 ## [137] NetRep_1.2.4 coda_0.19-4 ## [139] rmarkdown_2.16 MatrixGenerics_1.9.1 ## [141] Cairo_1.6-0 ggnewscale_0.4.7 ## [143] Biobase_2.57.1 WGCNA_1.71 ## [145] base64enc_0.1-3 interp_1.1-3
戴维·M·埃姆斯,史蒂文·凯利,2015年。“OrthoFinder:解决全基因组比较中的基本偏差,极大地提高了正交群推断的准确性。”基因组生物学16(1): 1 - 14。https://doi.org/10.1186/s13059-015-0721-2.
彼得·朗菲尔德和史蒂夫·霍瓦特,2008。WGCNA:加权相关网络分析的R包。BMC生物信息学9(1): 559。https://doi.org/10.1186/1471-2105-9-559.
里奇,斯科特·C,斯蒂芬·沃茨,利亚姆·g·费恩利,凯瑟琳·e·霍尔特,盖德·亚伯拉罕,迈克尔·井上,2016。“一种可扩展的排列方法揭示了大型数据集中网络模块的复制和保存模式。”电池系统3(1): 71-82。https://doi.org/10.1016/j.cels.2016.06.012.
Shin, Junha, Harald Marx, Alicia Richards, Dries Vaneechoutte, Dhileepkumar Jayaraman, Junko Maeda, Sanhita Chakraborty等。2020。“一个基于网络的比较框架,以研究植物系统发育中蛋白质组的守恒和分歧。”核酸研究, 1。https://doi.org/10.1093/nar/gkaa1041.
范·贝尔,米歇尔,蒂姆·迪尔斯,埃米莲·范卡斯特,卢卡斯·克雷夫特,亚历山大·博茨基,伊夫·范·德·皮尔,弗雷德里克·科本斯和克拉斯·范德波尔。2018。“PLAZA 4.0:功能、进化和比较植物基因组学的综合资源。”核酸研究46 (d1): d1190-d1196。https://doi.org/10.1093/nar/gkx1002.