其他
富集基因之注释缺失
小伙伴说注释不全,比如KEGG只有不到1万个基因有注释,但他一次RNA-seq出来的基因有2万多个,那其它没注释那1万多个岂不是扔了?!就某个通路来说,两种情况,要么属于,要么不属于这个通路。那1万多个应该放在背景里,不要扔。
我的解答是三种情况,1属于,2不属于,3不知道。对于缺失信息的,当然是扔。
然而他觉得影响不大,这必须是有影响的。我们算一下p值就知道了。
第一种情况,只搞大N
> k
[1] 10
> n
[1] 100
> M
[1] 500
> N1
[1] 10000
> phyper(k-1, M, N1-M, n, lower.tail=F)
[1] 0.02751124
比如有这样的情况,算出来0.0275,假如背景现在翻一翻,我们来看一下:
> N2
[1] 20000
> phyper(k-1, M, N2-M, n, lower.tail=F)
[1] 0.0002018491
p值变成正确的100分之一了。影响是如此之大!
第二种情况,N和n都搞大
第一种情况是最常见的,有些web-server或软件,会有参数说估计一下物种的基因总数,这就是在搞大N啊。
然后你可能会觉得,N大了,那你的基因列表里没注释的也不能扔啊,N翻倍了,n也应该翻倍?!
我们就当n也翻倍吧,看一下:
> phyper(k-1, M, N2-M, n*2, lower.tail=F)
[1] 0.02930878
好像是和正确答案差不多,然而大家有没有想到,这是有前提条件的,建立在完全随机的基因上,也就是说基因有没有注释的概率是一样的,我们在一个基因池子里随机捞一些出来研究,这显然是不成立的,有些通路就是被研究得很透,有些就是基本未知。科学上有些东西,就像个死火山,要靠某个突破之后突然喷发,研究上的东西,从来不是随机在发展。还拿KEGG来说吧,也就是代谢通路比较全。
所以第一点,N翻倍了,n在事实上不会刚好也翻倍的。假如n是乘1.5吧,我们来看p值:
> phyper(k-1, M, N2-M, n*1.5, lower.tail=F)
[1] 0.004529063
是正确p值的1/7,差别还有蛮大的。
即使第二种情况成立,注释是随机的,你拿到的基因列表,也不应该是随机的,你无法对缺失注释的基因的分布做任何的估计,特别是对你的基因列表,不扔是错的。
所以必须要扔,注释信息本身是不全的,是有bias的,但这是现实,你没办法改善现实的情况下,起码不要想当然去把情况弄得更糟。