相关性网络图

写在前面
我8月26号踏着欢快的脚步回家度假,原计划9月5号回珠海,结果返程飞机被连环取消了三次,我滞留在家5天了,已经搭好戏台子在家讲课,打算等没课的周天再走。。。

1.从一个表达矩阵开始

相关性网络图一般都是经过若干步骤选出来几个感兴趣的基因展示一下,下面的这个例子用我的小R包tinyarray获取表达矩阵和做探针注释、差异分析了,相当于对芯片常规分析的一个简化操作。

#devtools::install_github("xjsun1221/tinyarray")
library(tinyarray)
gse = "GSE42872"
geo = geo_download(gse,destdir=tempdir(),by_annopbrobe = FALSE)
Group = rep(c("control","treat"),each = 3)
Group = factor(Group)
find_anno(geo$gpl)
## [1] "`library(hugene10sttranscriptcluster.db);ids <- toTable(hugene10sttranscriptclusterSYMBOL)` and `ids <- AnnoProbe::idmap('GPL6244')` are both avaliable"
ids <- AnnoProbe::idmap(geo$gpl,destdir = tempdir())
deg = get_deg(geo$exp,Group,ids)

这个deg就是经过整理的差异分析结果表格。

head(deg)
##       logFC   AveExpr         t      P.Value    adj.P.Val        B probe_id
## 1  5.780170  7.370282  82.94833 3.495205e-12 1.163798e-07 16.32898  8133876
## 2 -4.212683  9.106625 -68.40113 1.437468e-11 2.393169e-07 15.71739  7965335
## 3  5.633027  8.763220  57.61985 5.053466e-11 4.431880e-07 15.04752  7972259
## 4 -3.801663  9.726468 -57.21112 5.324059e-11 4.431880e-07 15.01709  7972217
## 5  3.263063 10.171635  50.51733 1.324638e-10 8.821294e-07 14.45166  8129573
## 6 -3.843247  9.667077 -45.87910 2.681063e-10 1.487856e-06 13.97123  8015806
##   symbol change ENTREZID
## 1   CD36     up      948
## 2  DUSP6   down     1848
## 3    DCT     up     1638
## 4  SPRY2   down    10253
## 5  MOXD1     up    26002
## 6   ETV4   down     2118

把表达矩阵转换一下,并选了top10差异基因用于做后续的网络图

exp = trans_array(geo$exp,ids)
cg = deg$symbol[deg$change!="stable"]
set.seed(10086)
exp = exp[head(cg,10),]
exp[1:4,1:4]
##       GSM1052615 GSM1052616 GSM1052617 GSM1052618
## CD36     4.54610    4.40210    4.49239   10.25060
## DUSP6   11.25310   11.20760   11.17820    6.98791
## DCT      5.81479    5.91209    6.11324   11.54910
## SPRY2   11.64830   11.63730   11.59630    7.90508

2.计算相关性

根据相关系数和p值做了个分组,用于后面的配色了,我用的是0.3,这个阈值可以调整。

library(corrplot)
M = cor(t(exp))
testRes = cor.mtest(t(exp), conf.level = 0.95)$p
library(tidyverse)
g = pivot_longer(rownames_to_column(as.data.frame(M),var = "from"),
             cols = 2:(ncol(M)+1),
             names_to = "to",
             values_to = "cor")
gp = pivot_longer(rownames_to_column(as.data.frame(testRes)),
             cols = 2:(ncol(M)+1),
             names_to = "gene",
             values_to = "p")
g$p = gp$p
g = g[g$from!=g$to,]
g$group = case_when(g$cor>0.3 & g$p<0.05 ~ "positive",
                    g$cor< -0.3 & g$p<0.05 ~ "negative",
                    T~"not" )
head(g)
## # A tibble: 6 x 5
##   from  to       cor            p group   
##   <chr> <chr>  <dbl>        <dbl> <chr>   
## 1 CD36  DUSP6 -1.00  0.0000000933 negative
## 2 CD36  DCT    0.999 0.00000196   positive
## 3 CD36  SPRY2 -1.00  0.000000226  negative
## 4 CD36  MOXD1  1.00  0.0000000840 positive
## 5 CD36  ETV4  -0.999 0.00000208   negative
## 6 CD36  DTL   -0.999 0.00000168   negative

上面这个g就是网络图的输入数据了

3.画图

正相关和负相关分别用红色和蓝色表示咯。

library(igraph)
network =  graph_from_data_frame(d=g[g$group!="not",c(1,2,3,5)], directed=F) 

my_color = c("#2874C5","#f87669")[as.numeric(as.factor(E(network)$group))]
par(bg="white", mar=c(0,0,0,0))
plot(network,
     vertex.size=20,
     layout=layout.circle,
     vertex.label.cex=0.7,
     vertex.frame.color="transparent",
     edge.width=abs(E(network)$cor)*3,
     edge.color=my_color,edge.curved = 0.2)

4.专用的相关性网络图R包

发现一个哭笑不得的现象,如果这些基因相关性太强了,这个专用的R包画图还叠到一起了,不是个例,我换电脑试过了哈哈。

library(tidyverse)
t(exp) %>% corrr::correlate() %>%
  corrr::network_plot(colours = c("#2874C5", "white", "#f87669"),repel = F,min_cor = .5)

反而是他们的相关性不特别强时,才比较好看,错落有致了咧。

exp = trans_array(geo$exp,ids)
set.seed(100)
cg = sample(1:nrow(exp),10)
exp = exp[cg,]
t(exp) %>% corrr::correlate() %>%
  corrr::network_plot(colours = c("#2874C5", "white", "#f87669"),repel = F,min_cor = .5)

奇妙的体验。

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

推荐阅读更多精彩内容