????之前有一位粉絲后臺(tái)留言說能不能出一期有關(guān)于共線性網(wǎng)絡(luò)的文章,說實(shí)話肩袍,小編之前只在文獻(xiàn)中看到過這類圖杭棵,對(duì)于其原理也是迷迷糊糊》沾停看了好多別人寫的文章魂爪,根據(jù)大佬們的思路,我也大致整理了一些代碼艰管,希望能對(duì)大家有所啟發(fā)滓侍。話不多說,直接上正文吧牲芋!
1撩笆、前期準(zhǔn)備
rm(list=ls())#clear Global Environment
setwd('D:\\桌面\\共線性網(wǎng)絡(luò)分析')#設(shè)置工作路徑
#安裝包
install.packages('Hmisc')
install.packages("igraph")
#加載包
library(Hmisc)
library(igraph)
2尔破、加載、預(yù)處理數(shù)據(jù)
1)加載數(shù)據(jù)
df1 <- read.table(file="otu.txt",sep="\t",header=T,check.names=FALSE,row.names = 1)
head(df1)
image.png
2)求相對(duì)豐度
df2 <- apply(df1,2,function(x) x/sum(x))
3)過濾低豐度OTU
df3 <- df2[which(rowSums(df2) >= 0.01), ]#將豐度小于0.01的舍棄
3浇衬、數(shù)據(jù)計(jì)算
1)計(jì)算OTU間的相關(guān)性
df_corr <- rcorr(t(df3), type = 'spearman')#這里我們計(jì)算spearman相關(guān)系數(shù)
2)提取R值懒构、P值并校正P值
df_corr_r = df_corr$r
df_corr_p = df_corr$P#注意,這里P大寫
# 使用BH法校正p值
df_p <- p.adjust(df_corr_p, method = 'BH')
3)確定物種間存在相互作用關(guān)系的閾值耘擂,將相關(guān)性R矩陣內(nèi)不符合的數(shù)據(jù)轉(zhuǎn)換為0
df_corr_r[df_corr_p>0.05|abs(df_corr_r)<0.6] = 0
4)構(gòu)建igraph對(duì)象
df_igraph <- graph_from_adjacency_matrix(df_corr_r,mode="undirected",weighted=TRUE,diag=FALSE)
5)提取權(quán)重
df_weight = E(df_igraph)$weight
4胆剧、簡單繪圖
# 設(shè)定隨機(jī)種子數(shù),后續(xù)出圖都從同一隨機(jī)種子數(shù)出發(fā)醉冤,保證前后出圖形狀相對(duì)應(yīng)
set.seed(12)
plot(df_igraph,main="Co-occurrence network",vertex.frame.color=NA,vertex.label=NA,edge.width=1,
vertex.size=5,edge.lty=1,edge.curved=TRUE,margin=c(0,0,0,0))
image.png
5秩霍、個(gè)性化繪圖
1)相關(guān)性顏色設(shè)置
# 如果構(gòu)建網(wǎng)絡(luò)時(shí),weighted=NULL,此步驟不能統(tǒng)計(jì)
sum(df_weight>0)
sum(df_weight<0)
# 通過V()和E()對(duì)節(jié)點(diǎn)和邊的屬性進(jìn)行訪問
# 設(shè)置線的顏色,正相關(guān)為紅色蚁阳,負(fù)相關(guān)為藍(lán)色
df_edge_color = ifelse(df_weight>0, "red",ifelse(df_weight<0, "blue","grey"))
E(df_igraph)$color = as.character(df_edge_color)
# 設(shè)定邊的寬度铃绒,這里我們將相關(guān)系數(shù)與邊寬進(jìn)行關(guān)聯(lián)
E(df_igraph)$width = abs(df_weight)*2.5
2)加入OTU豐度信息,使得節(jié)點(diǎn)大小代表豐度
data <- rowSums(df1)
data1=as.data.frame(data)
df_igraph_size = data1[V(df_igraph)$name,] # 篩選對(duì)應(yīng)OTU屬性
df_igraph_size2 = log10(df_igraph_size)#數(shù)據(jù)進(jìn)行轉(zhuǎn)換
V(df_igraph)$size = df_igraph_size2
3)節(jié)點(diǎn)顏色設(shè)置成OTU代表的門
data2=read.table(file="phylum_otu.txt",sep="\t",header=T,
check.names=FALSE,row.names = 1)
df_igraph_col = data2[V(df_igraph)$name,]
df_igraph_col2=as.factor(df_igraph_col)
levels(df_igraph_col2)
color=c("green","brown","pink")
levels(df_igraph_col2) = color # 直接修改levles可以使得值全部對(duì)應(yīng)替換
V(df_igraph)$color = as.character(df_igraph_col2)
4)繪圖
set.seed(12)
plot(df_igraph,main="Co-occurrence network",vertex.frame.color=NA,
edge.lty=1,edge.curved=TRUE,margin=c(0,0,0,0),
vertex.label.cex=.7,vertex.label.dist=1,#標(biāo)簽大小
layout=layout_in_circle#控制樣式螺捐,具體見官方文檔
)
image.png
5)添加圖例
legend(x=-1.7,y=-0.7,levels(as.factor(df_igraph_col)),pch=21,col="black",pt.bg=color)
image.png
注:圖中節(jié)點(diǎn)間的連線顏色代表OTU間的相關(guān)性颠悬,紅色為正相關(guān),藍(lán)色為負(fù)相關(guān)定血,粗細(xì)代表相關(guān)性大信獍;節(jié)點(diǎn)大小代表豐度大欣焦怠灾票;節(jié)點(diǎn)顏色代表OTU的物種信息(門水平)
參考:
1)https://blog.csdn.net/woodcorpse/article/details/78737867
2)https://igraph.org/r/doc/layout_as_bipartite.html
源碼及數(shù)據(jù)在微信公眾號(hào)后臺(tái)回復(fù)獲取CK洹?浴!
看不懂代碼的濒析,這里推薦幾個(gè)可以在線做網(wǎng)絡(luò)圖的網(wǎng)站:
1)圖圖云(http://www.cloudtutu.com/)
2)ChiPot(https://www.chiplot.online/)
3)派森諾基因云(https://www.genescloud.cn/)