从mRNA到ceRNA network

ceRNA 最近被玩的很多,构建的方法很多,这个是我这几天探索觉得比较好用也比较省力的,分享给大家。
我已经把代码 数据 文件打包好了,在生信星球公众号后台回复ce657即可获得。

0.R包安装

options(BioC_mirror="http://mirrors.tuna.tsinghua.edu.cn/bioconductor/")
options("repos" = c(CRAN="http://mirrors.cloud.tencent.com/CRAN/"))
options(download.file.method = 'libcurl')
options(url.method='libcurl')
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
if(!require(multiMiR))BiocManager::install("multiMiR",ask = F,update = F)
library(multiMiR)

1.从mRNA得到miRNA

输入数据的获得方式:使用某个癌症的RNA-seq数据经过差异分析、PPI网络等的筛选,得到几个关键的mRNA,保存在9hubgenes.txt。

x = read.table("9hubgenes.txt",stringsAsFactors = F)$V1;x
## [1] "MMP9"  "CXCL8" "ACTB"  "TGB1"  "STAT1" "TOP2A" "CDK1"  "GNMT"  "ABAT"

我翻阅了很多网页工具和教程,发现multiMiR这个R包很优秀,结合了14个数据库,其中包括了有实验方法验证互作关系的mirTarbase。详见:[microRNAs靶基因数据库哪家强]https://mp.weixin.qq.com/s/n_UncYeGIQFLneTMK2rTXQ

这个工具可以从mRNA得到miRNA,也可以从miRNA得到mRNA,在这里使用前者,table = ’validated’这个参数是默认的,写上是为了和table = ’predicted’区分开,两者对应的数据库源不同,前者是经实验验证的,数量会更少一些,也更可靠一些。

gene2mir <- get_multimir(org     = 'hsa',
                         target  = x,
                         table   = 'validated',
                         summary = TRUE,
                         predicted.cutoff.type = 'n',
                         predicted.cutoff      = 500000)
## Searching mirecords ...
## Searching mirtarbase ...
## Searching tarbase ...
ez = gene2mir@data[gene2mir@data$database=="mirtarbase",];dim(ez)
## [1] 397  10

这里大材小用一下,只选了3个数据库中的一个,实验验证也分几个等级,最严谨的是Luciferase reporter assay,只选出它:

table(ez$support_type)
## 
##        Functional MTI Functional MTI (Weak)    Non-Functional MTI 
##                    43                   353                     1
ez = ez[stringr::str_detect(ez$experiment,
                            "Luciferase reporter assay"),];dim(ez)
## [1] 25 10
miRNAs = unique(ez$mature_mirna_id)

2.从miRNA得到lncRNA

我查了一下相关的文献,lncRNA 和miRNA互作的数据库使用比较多的有三个:mircode,starbase,mirnet,我都看了一下,最后感觉starbase表现最好。

我在网页上戳戳戳了半天,发现starbase只能一次搜索一个miRNA,我疯了。想要下载它的lncRNA - miRNA 互作数据自己探索,没有在网页上找到直接下载的按钮,但找到了关于API的说明里有:


截图出自:http://starbase.sysu.edu.cn/tutorialAPI.php

在linux命令行用curl,写对筛选要求就可以获取数据啦。全部lncRNA - miRNA 互作数据的获取代码是:

curl 'http://starbase.sysu.edu.cn/api/miRNATarget/?assembly=hg19&geneType=lncRNA&miRNA=all&clipExpNum=0&degraExpNum=0&pancancerNum=0&programNum=0&program=None&target=all&cellType=all' > starBaseV3_hg19_CLIP-seq_lncRNA_all.txt &

下载的这句代码来自:https://www.jianshu.com/p/b7e4830c0b01

有了这个数据,读进R语言就可以随便玩耍啦。

starbase = data.table::fread("starBaseV3_hg19_CLIP-seq_lncRNA_all.txt");dim(starbase)
## [1] 71952    17

很多文献里会把GENECODE里没有注释的lncRNA去掉,这个也很好操作,anno.Rdata来自于genecodev22版本的gtf文件,参考:https://mp.weixin.qq.com/s/bGoUbLuBdPteo-oG8ckMVw

在今天的资料里这个anno.Rdata文件直接提供,可以反复使用的。

load("anno.Rdata")
p1 = starbase$geneName %in% lnc_anno$gene_name;table(p1)
## p1
## FALSE  TRUE 
## 43924 28028
starbase = starbase[p1,];dim(starbase)
## [1] 28028    17
lnc_mi = starbase[starbase$miRNAname %in% miRNAs,]
length(unique(lnc_mi$miRNAname))
## [1] 19 
colnames(lnc_mi)
##  [1] "miRNAid"      "miRNAname"    "geneID"       "geneName"     "geneType"    
##  [6] "chromosome"   "start"        "end"          "strand"       "clipExpNum"  
## [11] "degraExpNum"  "RBP"          "merClass"     "miRseq"       "align"       
## [16] "targetSeq"    "pancancerNum"

对starbase数据库提供的数据列名的解释里,有两个比较重要的:

clipExpNum :The number of CLIP-seq experiments ; pancancerNum : Number of Cancer types (Pan-Cancer) that miRNA-target show anti-correlation relationships (pearson correlation: r<0, p-value<0.05).

所以pancerNum是几 就意味着这对miRNA-lncRNA在多少种癌症中表达量负相关,省掉了很多计算。

数据库的tutorial里面还提到了一个比较严格的筛选标准: CLIP evidence (>=5), degradome evidence (>=1), Pan-Cancer (>=10), program number (>=5) and predicted program (None).

degradome evidence 的限制条件,加上和不加数量有差别。

p2 = lnc_mi$pancancerNum >10  &lnc_mi$clipExpNum>4;table(p2)
## p2
## FALSE  TRUE 
##   927    15
p3 = lnc_mi$pancancerNum >10  &lnc_mi$clipExpNum>4 & lnc_mi$degraExpNum >0;table(p3)
## p3
## FALSE  TRUE 
##   939     3
lnc_mi$geneName[p2]
##  [1] "MALAT1"      "MALAT1"      "SNHG1"       "KCNQ1OT1"    "ZFAS1"      
##  [6] "GAS5"        "FGD5-AS1"    "PITPNA-AS1"  "LRRC75A-AS1" "LRRC75A-AS1"
## [11] "H19"         "OIP5-AS1"    "TUG1"        "TUG1"        "HAGLR"
lnc_mi$geneName[p3]
## [1] "SNHG1"       "PITPNA-AS1"  "LRRC75A-AS1"

后面是网络的可视化,可以在cytoscape里完成啦。

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