两个检验给ceRNA锦上添花

前面提到过gdcRNAtools里面的ceRNA网络构建

构建鉴定ceRNA的标准有4个:
(1)lncRNA和mRNA之间共享的miRNA数量;
(2)lncRNA与mRNA的表达相关性;
(3)共享miRNA对lncRNA和mRNA的调控相似性;
(4)(sensitivity)灵敏度相关性

前两条在很多ceRNA网络构建的文章中提及,比如:
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6308055/

https://pubmed.ncbi.nlm.nih.gov/29082457/

当然也有大把的文章里没有提及这两个检验,做了是锦上添花,不做也没有太大问题。

落到具体的代码实现,就是计算一个是几何分布检验的p值,一个皮尔逊相关性p值。(我知道很多人要被名字吓跑了。但是我还是要说,别走!不难!)

gdcRNAtools里构建网络的函数需要将miRNA的表达矩阵一起输入,今天做的数据是没有miRNA表达矩阵的,其实不影响网络构建,只是不能用这个一步到位的函数啦。

超几何分布检验就是反应二者交集足够多不

关于超几何分布检验,放进R语言也无非就是一个函数。有一个讲的比较好的例子,参考自:https://blog.csdn.net/linkequa/article/details/88189582

设总共有29个人,其中11个吸烟者,18个非吸烟者,现从中随机抽取16个样本(在此实验中对应着肺癌病人),有10个是吸烟者,这样的事件是否显著?

p_value=phyper(10-1, #10个是吸烟者
               11, #11个吸烟者
               18, #18个非吸烟者
               16, #随机抽取16个(癌症人数)
               lower.tail=F)
p_value
## [1] 0.003135274

设总共有29个人,其中16个癌症患者,13个正常人,现从中随机选出11个人(对应着所有抽烟的人),有10个是癌症患者,这样的事件是否显著?

p_value=phyper(10-1, #10个是癌症患者
               16, #16个癌症患者
               13, #13个正常人
               11, #随机选出11个人(吸烟人数)
               lower.tail=F)
p_value
## [1] 0.003135274

emmm......想继续写点啥的,算了。

只需要学个小函数

我去找了gdcRNAtools 在github上的代码,发现超几何分布检验其实被写成函数了,只是没有export,因此只是相当于作者写的时候分段,而用户无法使用。

所以我将这个函数拿下来自己捯饬了一下,放进了tinyarray,下载1.3.3以上的版本可以用。使用起来很简单的!!!

https://github.com/xjsun1221/tinyarray

1.输入数据

rm(list = ls())
library(tinyarray)
load("exp_target.Rdata")
ls()
## [1] "lnc_exp"  "lnc_mi"   "m_mi"     "mRNA_exp"
lnc_exp[1:4,1:4]
##           TCGA-BR-A4QL-01
## LINC00337          4.0000
## CDC42-IT1          2.5850
## LINC00853          5.2854
## ROR1-AS1           1.5850
##           GTEX-QLQ7-0826-SM-447B3
## LINC00337                       1
## CDC42-IT1                       0
## LINC00853                       0
## ROR1-AS1                        1
##           TCGA-VQ-A927-01
## LINC00337          3.8074
## CDC42-IT1          2.5850
## LINC00853          3.7004
## ROR1-AS1           4.1699
##           GTEX-132AR-2426-SM-5IFFD
## LINC00337                        0
## CDC42-IT1                        2
## LINC00853                        1
## ROR1-AS1                         2
mRNA_exp[1:4,1:4]
##        TCGA-BR-A4QL-01 GTEX-QLQ7-0826-SM-447B3
## CFAP74          5.4919                  0.0000
## GABRD           4.3219                  2.8074
## TP73            9.9092                  3.3291
## HES2           10.6812                  0.0000
##        TCGA-VQ-A927-01 GTEX-132AR-2426-SM-5IFFD
## CFAP74          2.3219                   2.0000
## GABRD           6.0444                   2.8074
## TP73            7.8184                   4.9773
## HES2            6.8826                   2.0000
head(lnc_mi)
##      geneName      miRNAname
## 1211   MALAT1   hsa-miR-1-3p
## 1212   MALAT1   hsa-miR-1-3p
## 1258     UCA1   hsa-miR-1-3p
## 1303 SND1-IT1 hsa-miR-101-3p
## 1316   MALAT1 hsa-miR-101-3p
## 1336   TYMSOS hsa-miR-101-3p
head(m_mi)
##     target_symbol mature_mirna_id
## 125          ACHE  hsa-miR-212-3p
## 128        ADRA2A  hsa-miR-26b-5p
## 129          ACAN hsa-miR-181a-5p
## 130           AGT  hsa-miR-26b-5p
## 132       ALDH3B2  hsa-miR-124-3p
## 141        ALOX15     hsa-miR-665

lnc_mi是从数据库获取的lncRNA与miRNA对应关系,m_mi 是从数据库获取的mRNA和miRNA的对应关系。注意miRNA都应放在第二列的位置上,列名可以随意。

2.超几何分布检验

hyperoutput = hypertest(
  lnc = rownames(lnc_exp),
  pc  = rownames(mRNA_exp), 
  lnctarget = lnc_mi,
  pctarget = m_mi
)

hyperPValue 是超几何分布检验的p值,Counts是共享miRNA的数量,可以根据这两个指标来筛选。

k1 = hyperoutput$hyperPValue<0.05;table(k1)
## k1
## FALSE  TRUE 
##  3112   510
k2 = hyperoutput$Counts>2;table(k2)
## k2
## FALSE  TRUE 
##  2691   931
table(k1&k2)
## 
## FALSE  TRUE 
##  3337   285
hysmall = hyperoutput[k1&k2,];dim(hysmall)
## [1] 285   9

3.相关性检验

直接选择符合超几何分布检验的基因和lncRNA来做,减少计算时间。plcortest函数,直接返回相关性p值<0.05的基因,以列表的形式组织,列表元素名字为lncRNA,元素内容为mRNA。

hylnc = unique(hysmall$lncRNAs)
hypc = unique(hysmall$Genes)

v = plcortest(lnc_exp[hylnc,],
              mRNA_exp[hypc,])
length(v) #有多少个lncRNA找到了显著相关的mRNA
## [1] 19
str(v[1:3])
## List of 3
##  $ TRPM2-AS : chr [1:169] "NUSAP1" "APOBEC3B" "GPRC5A" "CXCL5" ...
##  $ TEX41    : chr [1:169] "NUSAP1" "APOBEC3B" "GPRC5A" "CXCL5" ...
##  $ LINC00944: chr [1:169] "NUSAP1" "APOBEC3B" "GPRC5A" "CXCL5" ...

相关性显著与超几何分布检验显著的lncRNA就是v列表元素的名字。而两个都显著的mRNA,就需要取交集来实现了。

hc  = lapply(hylnc,function(x){
  intersect(hysmall[hysmall$lncRNAs==x,"Genes"],
            v[[x]])
})
names(hc) = hylnc
hc = hc[sapply(hc,length)!=0]
str(hc[1:3])
## List of 3
##  $ TRPM2-AS : chr [1:78] "NUSAP1" "GPRC5A" "ASPM" "MMP9" ...
##  $ TEX41    : chr [1:77] "APOBEC3B" "CXCL5" "KIF18B" "KIF14" ...
##  $ LINC00944: chr [1:3] "KLK10" "CREG2" "CCR6"

最后组合起来,成为一个数据框。可以统计经过这两种检验的三种RNA的个数了。

ce = hysmall[hysmall$lncRNAs %in% names(hc) & hysmall$Genes %in% unlist(hc),
             c(1,2,ncol(hysmall))]
head(ce,3)
##        lncRNAs    Genes
## 17746 TRPM2-AS   NUSAP1
## 3780     TEX41 APOBEC3B
## 17701 TRPM2-AS   GPRC5A
##                                                                                                                                     miRNAs
## 17746                                                              hsa-miR-103a-3p,hsa-miR-107,hsa-miR-138-5p,hsa-miR-16-5p,hsa-miR-195-5p
## 3780                                                                              hsa-miR-103a-3p,hsa-miR-107,hsa-miR-16-5p,hsa-miR-195-5p
## 17701 hsa-miR-103a-3p,hsa-miR-107,hsa-miR-15a-5p,hsa-miR-15b-5p,hsa-miR-16-5p,hsa-miR-195-5p,hsa-miR-424-5p,hsa-miR-497-5p,hsa-miR-6838-5p
length(unique(ce$lncRNAs))
## [1] 18
length(unique(ce$Genes))
## [1] 169
length(unique(unlist(stringr::str_split(ce$miRNAs,","))))
## [1] 135

tinyarray包里现有的函数有不少啦,还会继续更新:
geo_download() : 提供geo编号,返回表达矩阵、临床信息表格和使用的平台编号。
get_deg() :提供芯片表达矩阵、分组信息、探针注释,返回差异分析结果。
multi_deg() : 多个分组(最多5个)的差异分析
cor.full()和cor.one() :批量计算基因间的相关性
几个绘图函数:draw_heatmap,draw_volcano,draw_venn
trans_exp():将tcga或tcga+gtex数据进行基因id转换
t_choose():批量做单个基因的t检验
point_cut():批量计算生存分析最佳截点
surv_KM():批量做KM生存分析,支持用最佳截点分组
surv_cox():批量做cox生存分析,支持用最佳截点分组
hypertest():批量做mRNA和lncRNA的超几何分布检验
plcortest():批量做mRNA和lncRNA的相关性检验

顺便说一句,我上课时会和学员说:你运行一个代码报错了,不代表代码错了,在这里再补一句,你装不上一个包,也不代表这个包的作者写错了。解决安装R包的报错,是所有R语言学习者的必修课,会遇到很多坑,网络问题占大多数。github上的包可以下载下来,使用devtools::install_local进行本地安装,但仍然不能确保一次成功,需要解决问题的能力。

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