全基因组关联分析中上位性检测算法的研究

全基因组关联分析中上位性检测算法的研究

前言

这个项目主要是分享一些全基因组关联分析中上位性检测算法的研究经验,算是,怎么入门,写这么个东西,一是做总结,二是咱实验室估计以后还会有做这个方向的,备着吧。

SNP,single nucleotide polymorphism,单核苷酸多态性主要是指在基因组水平上由单个核苷酸的变异所引起的DNA序列多态性。它是人类可遗传的变异中最常见的一种,占所有已知多态性的90%以上。SNP在人类基因组中广泛存在,平均每300个碱基对中就有1个,估计其总数可达300万个甚至更多。SNP是一种二态的标记,由单个碱基的转换或颠换所引起,也可由碱基的插入或缺失所致。SNP既可能在基因序列内,也可能在基因以外的非编码序列上。【百度百科】

通俗来说,SNP是人类DNA序列中最常见的一种变异,应该也是最简单的,这种变异遍布在整个DNA链上,我们可以通过对SNP多态性的分析来间接代表整个DNA链的多态性,而DNA链的多态性影响着人类的一些生命现象。

图片加载错误

每一个SNP,都会在NCBI(美国国家生物信息中心)进行注册,起码我是这么认为的,下图是一个截图,这里会针对每个SNP有一个编号,每个SNP都会有一些信息,这些信息的价值很高,我设计的算法仅仅使用了其中一种”SNP与基因之间的关系“信息,就够我白活的了,很多信息我都看不懂。

图片加载错误

GWAS,Genome-Wide Association Studies,全基因组关联分析是应用基因组中数以百万计的单核苷酸多态性(single nucleotide polymorphism,SNP)为分子遗传标记,进行全基因组水平上的对照分析或相关性分析,通过比较发现影响复杂性状的基因变异的一种新策略。【百度百科】

通俗的说:

  • 1.针对一种疾病;
  • 2.征召数百甚至上千个患了这种疾病的人与正常的人;
  • 3.用SNP芯片测每个样本的全基因组范围内SNP的基因型;
  • 4.搜集、整理、去噪这些数据,整理成比较标准的格式;
  • 5.利用计算机软件分析这些数据,从中搜集与这种疾病相关的SNP;
  • 6.在生物上进行一些验证(这我就完全不懂了,也没想过);

我等学计算机的,只设计一些算法、开发一些软件来做第五步,在全基因组关联分析数据上检测与疾病相关的SNP是很复杂的任务,其原因就是由于上位性的存在。

上位性(epistasis)原意是指某一基因受不同位点上别的基因抑制而不能表达的现象。现在上位性的涵义已有了扩展,在群体遗传学和数量遗传学中非等位基因的遗传效应为非相加性时,常统称之为上位性。也就是位于不同座位上的基因间的非相加性相互作用。【百度百科】

通俗来说,就是一些SNP虽然在单变量分析下与样本的状态没有关系,但当它们与其他一些SNP组合在一起进行多变量分析时,与样本的状态体现出显著的相关性,假设我们面对的SNP集合时S1,S2,S3,....,Sn,而样本状态是Y,我们想要知道哪些S与Y是有关系的,在不考虑上位性的前提下,只需要对每个S和Y进行分析,时间复杂度是O(n),而当考虑二阶上位性时,需要查看Si、Sj和Y的关系,其中i,j属于任意的[1,n]上的值,这样的时间复杂度就是O(n2),而考虑k阶上位性时,其时间复杂性度就是O(nk),由于在全基因组关联分析数据中,n一般高达几十万,这种指数级的增长是非常吓人的,这就是上位性为全基因组关联分析带来的困难。

本项目主要是做一些总结,另一方面把如何入这个研究方向的门介绍一下,扫盲,我去年有呼吁大家做github,希望大家把自己的方向的一些东西,总结到这上面,然后别的同学感兴趣,可以看,可以学,这样才能讨论,讨论是很重要的,讨论可以帮助大家刺激新的想法,但讨论的基础是彼此有一定的基础,不然会一直答非所问,像去年王涛和马明睿讲讨论班的时候,我一直问,啥是图神经网络,他们费大事给我讲了十几分钟,我仍然表示一点也听不懂,因为我完全不能理解图结构是怎么作为网络的输入的,后来读了GAT的源码,我才会了,这不是讨论,讨论应该是一个彼此收益的过程。

本项目主要完成以下一些事情:

  • 1.介绍我的研究方向使用的数据;
  • 2.介绍一些算法和文章;
  • 3.以一篇文章为例,讲解整个的实验思路;
  • 4.我尽量做出一个方便大家入门的项目框架;

1.数据

我的研究方向是全基因组关联分析中上位性检测算法的研究,以下,我简称上位性检测算法,这个方向的研究使用的数据分为两种,模拟数据和真实数据,模拟数据中的致病SNP(与疾病相关的SNP组合)是已知的,用来对比算法检测上位性的能力,而真实数据是一种真是疾病的数据,它的结果对生物、医学是有意义的。

更具体的描述,我打算放在本项目的data目录下。

2.算法

本人多年来搜集了这个方向的一些算法,每个算法有对应的文章,这些文章都是有代码或软件,有的还有模拟数据集。

更具体的描述,我打算放在本项目的methods目录下。

3.实验思路

每个研究领域都有自己的一个研究的套路,这是很难创新的,我们只有清楚了这种套路的逻辑,才算是入门了一个研究领域,就如同王荣全做的PPI网络的研究方向:

  • 1.通过文献搜集标准蛋白质复合物数据集和PPI网络数据集;
  • 2.通过文献搜集算法、软件等可执行的东西;
  • 3.通过文献搜集评价算法优劣的函数;
  • 4.通过文献搜集展示结果的策略;

从一篇文章开始,逐步找它的参考算法和参考它的算法,不用细读,在文本里搜“http”或“code”等关键字,没有代码和数据提供的文章,可以直接先pass掉,管作者要,不给的,连文章都不要读。只找那些有代码的,有数据的更好,完成1,2两步,根本不用一天时间,这个时候,你是在决定,哪些文章需要你读。

从这些有代码、有数据的文章里找出一篇来精度,作为入门,推荐的是期刊好的、讲的简单易读的。

找几篇好的文章,看它们都用什么方法来比较算法的优劣、展示结果,所谓的好的文章,就是发在好期刊上的,如果有代码和数据,会更好,依此来完成3、4步。

这些都是套路,之后,了解了这些,你就可以制作一个类似本项目的结构,接下来才轮到你去开发一个算法,实验,现在普遍,上面的1234步根本没有做透,就开始自己写算法,这样是会绕很多弯路的。

正题:以MACOED算法的文章为例,介绍上位性检测算法中的实验思路

文章主要分成introduction、materials、methods、experiments and results、discussion五个部分:

introduction是个文章就有,不用说了。

materials介绍实验中用到的模拟数据和真实数据,完。

methods是对算法的描述,完。

discussion是讨论,完。

这些都是很常见的东西,各个领域都有,唯一要特殊解释的是experiments and results部分,这是上位性检测领域实验思路的核心,其实我在本项目的其他部分已经间接解释的差不多了,我好累啊:

  • 1.由于上位性检测领域并没有像标准蛋白质复合物那样的“标准”,所以要论述算法的能力,就不可以在真实的数据上论述,实验部分主要分为模拟数据上的实验和真实数据上的实验,模拟数据上的实验是为了对比MACOED算法和其他算法的能力,而真实数据上的实验是为了呈现一些生物上的结果;
  • 2.MACOED的作者在模拟数据上的实验比其他文章的要复杂,起码比我的复杂,对比很精细,我只学到了一点皮毛,他将自己的算法变着花样和其他算法,还和自己的算法进行对比,就是为了说明MACOED算法的各个组件都是很好的设计,而使用的评价函数是F-measure和power,参考本项目的data/simulated_data部分。无论如何,这一部分的思想就是,在很多的、各种各样的模拟数据上对MACOED算法与其他同类算法进行对比、分析,论述MACOED算法是很好的;
  • 3.MACOED算法在真实数据上的实验如下图,就这么点内容,其实作者,就是将MACOED算法用于分析了一个真实的全基因组关联分析数据,然后汇报了下结果,它的这个论述非常的标准,第一段论述他们发现了一些已经发现的东西,证明,他们的算法是有用、靠谱的,第二段论述了他们新的发现,现在看来,这篇文章对结果的论述很朴素,一般,我做的时候会统计很多东西、绘制很多图形,但那是由于,我自己都不知道自己发现了什么,所以一堆统计、陈列,这篇文章的论述,其实虽然看起来可能没有我做的好看,但就这么两句话,我是说不出来的,而且我的结果要比这篇文章的多、乱。总之吧,算法在真实数据上的实验,基本不需要进行对比分析,由于未知的东西太多,没有办法进行大规模的对比分析,你把自己的算法在真实的数据上运行一遍,将运行的结果变着花样展示成各种形式,就ok了;

图片加载错误

MACOED的实验思路还是偏复杂了,它的文章也是好,Bioinformatics,我的实验思路是简化版,就两步:

  • 1.在模拟数据集上对自己的算法和其他人的算法进行比较;
  • 2.在真实的数据集上运行自己的算法,展示结果。

4.框架

本项目是一个实验框架:

  • 1.通过git clone下载本项目;
  • 2.删除掉本项目data/simulated_data/下的所有文件名中包含result的文件(为了一些原因吧,methods下的所有算法,在分析data/simulated_data文件夹下的模拟文件时,如果已经存在对应的result文件,算法会跳过对应模拟数据的分析);
  • 3.配置环境变量(系统变量)GWAS_WORKSPACE=d:\workspace\git\gwas\,你自己机器的目录位置需要你自己看着办;
  • 4.确定methods下每个算法的参数,配置好,运行一个个算法,这些算法会分析data/simulated_data文件夹下的模拟数据,并在data/simulated_data文件夹下产生结果文件;
  • 5.通过eval文件夹下的两个python脚本读取、整理data/simulated_data文件夹下的结果文件,并绘制图形;
  • 6.本项目截止到目前为止,已经包括了除“真实数据实验部分”所有部分,你可以在methods下开发自己的算法,遵照其他methods的标准,读数据、写结果,就可以嵌入到整个项目之中,完成模拟数据集上的对比分析;

我已经尽力做分离了项目的各个部分,尽量地进行了封装,降低后继者的入门难度,等实验室服务器上线了,我再尝试将模拟数据集上传到本项目的data/simulated_data目录下,就完善了。

Guess you like

Origin blog.csdn.net/u010608296/article/details/121084380