一步完成WGCNA

OneStepWGCNA

今天发现TBtools上有了个神器 Rserver 。这意味我们可以把别人写好的R脚本直接拿过来运行。于是用OneStepWGCNA这个插件试验一下。本文主要记录试验过程和可能遇到的一些问题,主要参考『TBtools-plugin』OneStepWGCNA插件这篇文章。想要了解WGCNA的具体含义和流程可以参考:
WGCNA分析,简单全面的最新教程
一文学会WGCNA分析
WGCNA官方网站WGCNA算法研究笔记
OneStepWGCNA 的准备文件和详细参数

虽然题目有点标题党,但这个插件真的方便,真的感谢这个插件的作者。

工具准备

TBtools
Rserver: 需要在TBtools的用户群里下载,一共181M,相当于一个独立的R环境,具体安装方法参考Rserver 插件 for TBtools。用户群可以在公众号:生信药丸里找到。
OneStepWGCNA插件:可以在TBtools的plugin store下载到。建议先下载plugin store里的plugin store at high speed。因为在plugin store里下载插件太慢了,太慢了,太慢了。

数据准备

OneStepWGCNA 的输入文件是基因表达矩阵和表型数据(或样品分类数据)。这里用了RED数据库里的284个日本晴的不同部位,不同处理的表达矩阵(FPKM数据)。样品分类数据用每个样品取的组织。

表达矩阵

样品分类数据

第一次跑的时候遇到的坑

报错信息

第一次包发现GenomeInfoDb这个包没下下来,R文件里也没有申明需要这个包。我在TBtools的插件目录下OneStepWGCNA的R脚本里加上了:

if (!require('GenomeInfoDb')) install.packages('GenomeInfoDb')

R文件

再跑一次就成功了
这个TBtools插件文件夹位置一般在C:\Users\names\ .TBtools.Plugin\OneStepWGCNA

OneStepWGCNA 参数详解

readcount or fpkm 是表达矩阵,以Tab为分割符,行是样本,列是基因。
Trait data 是表型文件或分类文件,可以有多个表型,可以是连续性也可以是离散。如果要把多分类性状和连续性状都混到一起,可以把多分类性状转为one-hot编码,这个用下excel就能完成。


one-hot编码

Expression data 是表达矩阵数据类型,count数据是不能直接用来做WGCNA的
Normalization method 是表达矩阵转换的方式,如果是count数据可以选varianceStabilizingTransformation或log10(CPM+1),如果是FPKM可以选rawFPKM,不经过转换,和取对数。建议都试试,看看哪个效果更好。
RcCutoff 是用来除噪声的,我看原作者的教程里大概意思是count推荐10,FPKM推荐0.2,当然,这个参数还是要随着测序深度和具体生物学问题而改变的。
samplePerc 和上面的参数配对的,在0-1之间,如果是0.5,RcCutoff 是0.2 代表想要 50%的样品的FPKM>0.2。
RemainGeneNum 是保留多少基因进行WGCNA,写0或小于0就是啥都没了,会报错。
mergeCutHeight 是合并模块的阈值, 0.25的意思就是把相关系数大于0.75的模块合并。
minModuleSize 是指最少一个模块要包含30个基因。

输出结果

Sample_clustering 样品聚类结果


样品聚类结果

这里如果出现明显的离群样本,记住样本的名字,在表达矩阵和trait矩阵中删掉对应样本再跑一次


软阈值筛选

绿线为0.8,这里没有筛的很好的阈值,就选了经验阈值14来做power进行后续计算。
模块的邻接矩阵特征向量相关性

一共找到了10个模块,该结果主要反应模块间的相关性。


模块划分

表型与模块的关联

发现棕色模块和根的相关性最高,其他种子,花药,穗的部位都没有找到相关性高的模块。一个可能是由于这几个部位的样本量少,另一方面本身不同处理对表达量的影响也很大。这里只是试一试,并不能反应真实的科学结论。
基因对应的模块

可以拿表型关联上的模块做后续的分析,如GO,KEGG啥的,巧的是富集分析也能用TBtools做。

最后再唠叨两句

我发现最后结果里还有很多信息没有被存下来,我想看选几个基因画TOM图,或者画个网络图,或者是图的字体太小了,看不清想重新画,该咋办?
最粗暴的办法还是把整个网络保存下来,想要啥,自己整。

修改了下blockwiseModules的参数,把TOM和net都保存下来

以下代码主要来源于 WGCNA分析,简单全面的最新教程

library(WGCNA)
#把存入的Rdata都读进来,总能用上的 \xk one_traits是我设的Title name,要改
load("00.one_traits.datatraitbase.Rdata")
load("00.one_traits.net.Rdata")
load("00.one_traits.datatraitbase.Rdata")
load("00one_traits.Modular.Rdata")
load("one_traits.tom-block.1.RData")
Title<-"one_traits"
###TOM图
moduleColors = labels2colors(net$colors)
TOM <- as.matrix(TOM)
dissTOM = 1-TOM
# Transform dissTOM with a power to make moderately strong 
# connections more visible in the heatmap
plotTOM = dissTOM^7
# Set diagonal to NA for a nicer plot
diag(plotTOM) = NA
# Call the plot function
# 这一部分特别耗时,行列同时做层级聚类
TOMplot(plotTOM, net$dendrograms, moduleColors, 
        main = "Network heatmap plot, all genes")

###导出Cytoscape 图格式
probes = colnames(datExpr)
dimnames(TOM) <- list(probes, probes)
# Export the network into edge and node list files Cytoscape can read
# threshold 默认为0.5, 可以根据自己的需要调整,也可以都导出后在
# cytoscape中再调整
cyt = exportNetworkToCytoscape(TOM,
             edgeFile = paste(Title, ".edges.txt", sep=""),
             nodeFile = paste(Title, ".nodes.txt", sep=""),
             weighted = TRUE, threshold = 0.5,
             nodeNames = probes, nodeAttr = moduleColors)

## 模块内基因与表型数据关联
#关联样品性状的二元变量时,设置
robustY = ifelse(corType=="pearson",T,F)
if (corType=="pearsoon") {
  geneModuleMembership = as.data.frame(cor(datExpr, MEs_col, use = "p"))
  MMPvalue = as.data.frame(corPvalueStudent(
             as.matrix(geneModuleMembership), nSamples))
} else {
  geneModuleMembershipA = bicorAndPvalue(datExpr, MEs_col, robustY=robustY)
  geneModuleMembership = geneModuleMembershipA$bicor
  MMPvalue   = geneModuleMembershipA$p
}
# 计算性状与基因的相关性矩阵
## 只有连续型性状才能进行计算,如果是离散变量,在构建样品表时就转为0-1矩阵。
traitData<-read.table(traitsfile,header=T,sep='\t') #traitsfile 表型文件
if (corType=="pearsoon") {
  geneTraitCor = as.data.frame(cor(datExpr, traitData, use = "p"))
  geneTraitP = as.data.frame(corPvalueStudent(
             as.matrix(geneTraitCor), nSamples))
} else {
  geneTraitCorA = bicorAndPvalue(datExpr, traitData, robustY=robustY)
  geneTraitCor = as.data.frame(geneTraitCorA$bicor)
  geneTraitP   = as.data.frame(geneTraitCorA$p)
}

## Warning in bicor(x, y, use = use, ...): bicor: zero MAD in variable 'y'.
## Pearson correlation was used for individual columns with zero (or missing)
## MAD.

# 最后把两个相关性矩阵联合起来,指定感兴趣模块进行分析
module = "brown"#感兴趣的模块
pheno = "Root" #感兴趣的性状
modNames = substring(colnames(MEs_col), 3)
# 获取关注的列
module_column = match(module, modNames)
pheno_column = match(pheno,colnames(traitData))
# 获取模块内的基因
moduleGenes = moduleColors == module

# 与性状高度相关的基因,也是与性状相关的模型的关键基因
verboseScatterplot(abs(geneModuleMembership[moduleGenes, module_column]),
                   abs(geneTraitCor[moduleGenes, pheno_column]),
                   xlab = paste("Module Membership in", module, "module"),
                   ylab = paste("Gene significance for", pheno),
                   main = paste("Module membership vs. gene significance\n"),
                   cex.main = 1.2, cex.lab = 1.2, cex.axis = 1.2, col = module)
10000个基因的TOM

棕色模块与根的相关性
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容