生物信息学与算法生物分子网络构建和分析生物信息学

RNA-seq数据的基因共表达网络分析

2018-10-24  本文已影响221人  刘小泽

刘小泽写于18.10.24
最近开始写第一篇英文小论文,练练手,为将来写英文大论文做准备

目录

1 背景 Background

2 共表达流程 Tutorial


正文开始

1.1 Types of biological networks

生物网络可以包含不同的数据类型,用点(node)和边(edge)区分。常见的网络类型:

各种通路
1.2 Motivation for using co-expression networks
为何研究共表达

看图说话:某个细胞受到刺激1,也许它的A通路就会上调表达,B通路下调,结果可能比刺激前还要理想;

受到另一种刺激2后,A通路下调,B通路上调,那么可能就比较糟糕

通过共表达网络,就可以探索A、B通路是如何被调控的,以及背后基因的相互关系;另外,互作的基因一般都参与同样的生物途径

一般来讲,探索基因表达数据的标准流程是这样:

但是有个弊端,它只能两两比较(如:感染与未感染),然后得到的结果也只是知道哪些上调哪些下调,是一个宏观的结论

使用Co-expression network 共表达网络可以分析多个处理的基因表达数据(例如:不同时间段处理),还能推断未知基因产物的功能、检测sub-groups

1.3 Network inference and reverse engineering

利用网络进行推断:可以使用表达量数据、已知的转录因子、ChIP-ChIP或ChIP-seq、时间序列等,因为网络是有向、交叉 的,所以可以判断许多的关系信息

说到网络,就要看一下有向和无向网络:

install.packages("igraph")
library(igraph)
set.seed(1)
# 先构建一个有向网络临近矩阵

# create a 5x5 adjacency matrix
adj <- matrix(sample(c(0,1), 25, replace = T), nrow = 5)

# set diagonal to zero (no self-loops)
diag(adj) <- 0

# plotting with igraph
g <- graph.adjacency(adj, mode = "directed")
plot(g)

#再构建一个无向网络
adj[upper.tri(adj)] <- 0 #就是取矩阵的下半部分
g <- graph.adjacency(adj, mode = "undirected")
plot(g)

#再构建加权网络 weighted network
set.seed(1)
adj <- matrix(rnorm(25, mean = 3.5, sd = 5), nrow = 5)
adj[upper.tri(adj, diag = TRUE)] <- 0

# note that igraph ignores edges with negative weights
g <- graph.adjacency(adj, mode = "undirected", weighted = T)
plot(g, edge.width = E(g)$weight)

三种网络

构建共表达网络的关键步骤:


下面主要介绍前期数据处理部分,数据处理好了,后面真正的WGCNA才能做好

2.1 Preparing RNA-seq data for network construction
2.2 Prepare data and package
聚类+热图 过滤、转换前后对比

过滤并且log转换后,确实数据开始变好了

2.3 Remove non differentially-expressed genes

对于多个分组信息,需要生成几组两两组合的差异比较矩阵(取决于表型数据中的因子信息);并且方差不显著的基因就要去除

这里需要了解的有quantile normalizationvoom

# 首先,去除方差为0的基因,因为这些基因没有表现出任何差别,还有可能对下面构建模型产生误导
log_counts <- log_counts[apply(log_counts, 1, var) > 0,]

# 构建design矩阵为差异分析作准备
mod <- model.matrix(~0+samples$tissue)
# 如果需要考虑其他分组信息,只需要加进来就好
# 例如:mod <- model.matrix(~0+samples$tissue+samples$cellline)
# 再改一下列名(因为默认是把对应的分组信息全部当成列名)
colnames(mod) <- levels(samples$tissue)

fit <- lmFit(log_counts, design=mod)
# 生成一系列的两两组合差异比较矩阵
condition_pairs <- t(combn(levels(samples$tissue), 2))  

comparisons <- list()                                                                                                                                          
for (i in 1:nrow(condition_pairs)) {                                                                                                                                     
    comparisons[[i]] <- as.character(condition_pairs[i,])                                                                                                      
}   

# 设置一个储存差异基因的向量
sig_genes <- c()

# 为每对差异比较矩阵都生成差异基因,并存储到sig_genes空向量中
for (conds in comparisons) {
    # 这里conds如果中间有空格,就需要用make.names变成标准名
    contrast_formula <- paste(conds, collapse=' - ')
    # 然后就是标准limma流程
    contrast_mat <- makeContrasts(contrasts=contrast_formula, levels=mod)
    contrast_fit <- contrasts.fit(fit, contrast_mat)
    eb <- eBayes(contrast_fit)

#p值可以自定义,这里设置的比较严格
    sig_genes <- union(sig_genes, 
                       rownames(topTable(eb, number=Inf, p.value=0.005)))
}
# 最后把差异不显著的基因去除,留下DEGs
log_counts <- log_counts[rownames(log_counts) %in% sig_genes,]

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到Bioplanet520@outlook.com

Welcome to our bioinfoplanet!
上一篇下一篇

猜你喜欢

热点阅读