数学建模,我也总算是参加过的人了

来源:互联网 发布:软件支持多核 编辑:程序博客网 时间:2024/04/30 05:12

大学四年都没有参加过数学建模比赛,对于我这种天不怕地不怕,扛起火枪就死命往前冲的人来说,没有去感受一下那种被虐的体无完肤的感觉,实在是一种遗憾。终于在研究生期间,让我逮着了机会。前段时间一个数学院的女生向我请教C++问题,然后我顶着机院的光环,强行装了一把逼,瞬间树立了大神形象。这不,数学建模开始了,她和一个物理院的同学(后来发现是大神)就邀请我参加。那还有啥说的,对于我这种不要Face的人,那肯定是大腿一出现,就紧紧抱住啊,就这样,我加入了。下面谈谈我们的选题以及建模思路,在网上找了找,还没发现有同学发上来答案,看来大家都比较谦虚啊。我脸皮厚,不管了,发上来交流下,不会就要问嘛!

1、问题重述

1.1、问题的背景

人体的每条染色体携带一个 DNA 分子,人的遗传密码由人体中的 DNA 携带。DNA 是由分别带有 A,T,C,G 四种碱基的脱氧核苷酸链接组成的双螺旋长链分子。在这条双螺旋的长链中,共有约 30 亿个碱基对,而基因则是 DNA 长链中有遗传效应的一些片段。在组成 DNA 的数量浩瀚的碱基对(或对应的脱氧核苷酸)中,有一些特定位置的单个核苷酸经常发生变异引起 DNA 的多态性,我们称之为位点。

在 DNA 长链中,位点个数约为碱基对个数的 1/1000。由于位点在 DNA 长链中出现频繁,多态性丰富,近年来成为人们研究 DNA 遗传信息的重要载体,被称为人类研究遗传学的第三类遗传标记。

大量研究表明,人体的许多表型性状差异以及对药物和疾病的易感性等都可
能与某些位点相关联,或和包含有多个位点的基因相关联。因此,定位与性状或疾病相关联的位点在染色体或基因中的位置,能帮助研究人员了解性状和一些疾病的遗传机理,也能使人们对致病位点加以干预,防止一些遗传病的发生。近年来,研究人员大都采用全基因组的方法来确定致病位点或致病基因,具体做法是:招募大量志愿者(样本),包括具有某种遗传病的人和健康的人,通常用 1 表示病人, 0 表示健康者。 对每个样本,采用碱基(A,T,C,G)的编码方式来获取每个位点的信息(因为染色体具有双螺旋结构,所以用两个碱基的组合表示一个位点的信息);如表 1 中,在位点 rs100015 位置,不同样本的编码都是T 和 C 的组合,有三种不同编码方式 TT,TC 和 CC。类似地其他的位点虽然碱基的组合不同,但也只有三种不同编码。研究人员可以通过对样本的健康状况和位点编码的对比分析来确定致病位点,从而发现遗传病或性状的遗传机理。

1.2、待解决问题

1.2.1、问题一

请用适当的方法,把 genotype.dat 中每个位点的碱基(A,T,C,G) 编码方式转化成数值编码方式,便于进行数据分析。

1.2.2、问题二

根据附录中 1000 个样本在某条有可能致病的染色体片段上的 9445个位点的编码信息(见 genotype.dat)和样本患有遗传疾病 A 的信息(见phenotype.txt 文件)。设计或采用一个方法,找出某种疾病最有可能的一个或几个致病位点,并给出相关的理论依据。

1.2.3、问题三

同上题中的样本患有遗传疾病 A 的信息( phenotype.txt 文件)。现有 300 个基因,每个基因所包含的位点名称见文件夹 gene_info 中的 300 个dat 文件,每个 dat 文件列出了对应基因所包含的位点(位点信息见文件genotype.dat)。由于可以把基因理解为若干个位点组成的集合,遗传疾病与基因的关联性可以由基因中包含的位点的全集或其子集合表现出来请找出与疾病最有可能相关的一个或几个基因,并说明理由。

1.2.4、问题四

在问题二中,已知 9445 个位点,其编码信息见 genotype.dat 文件。在实际的研究中,科研人员往往把相关的性状或疾病看成一个整体,然后来探寻与它们相关的位点或基因。

2、问题的分析

2.1、针对问题一

题目要求用适当的方法,将 genotype.dat 中每个位点的碱基(A,T,C,G) 编码方式转化成数值编码方式,以便于进行数据分析,所谓数值编码,就是用特定的数字来表示的一种技术,是根据一定数据结构和目标的定性特征,将数据转换为代码或编码字符,在数据传输中表示数据组成,并作为传送、接受和处理的一组规则和约定。考虑到每个位点只包含三种碱基对状态,例如, rs3094315 位点中只包含 TT,TC,CC 这三种碱基对,再看了后面几问后,我们决定按次等位基因在碱基对中出现的次数来对 genotype.dat 文件中的碱基编码进行数值编码,什么意思了?举个例子,例如,若 rs3094315 位点中C为次等位基因,在 TT 的碱基对中C并未出现,因此 TT 的数值编码方式为 0,同理, TC 的数值编码为 1, CC 的编码为 2。这种编码有好处,便于后续统计计算。

2.2、针对问题二

要得到某种疾病最有可能的一个或几个致病位点,根据全基因组关联分析的原理,运用CASE-CONTROL方法在人群中选择病例组和对照组,某个等位基因或基因型在病例中出现的病率明显低于或者高于对照,说明她与疾病有关,题目中已经给了我们 500 个患有遗传病 A 的样本, 500 个未患病的样本,以及这 1000 个样本的位点信息,我们可以分别考察病例组和对照组中,每一个位点的MAF值,若某个位点的病例组和对照组的 MAF 值差距较大,则表明该位点与疾病有关。根据 MAF 的意义,我们利用 MAF 值初步筛选出可能致病位点的数据集,然后再从数据集中挑选最有可能的致病位点。这是一个数据统计检验和分类问题,常使用的方法用卡方检验,回归分析,决策树等。卡方检验可以给出检验 P 值, P 值越小,代表接受程度越好。在该问题中, P 值越小,代表位点致病的可能性越大。所以,我们可以利用卡方检验的方法,计算出数据集中每个位点的 P 值,对 P 值进行排序,挑选出最有可能的致病位点。而决策树的影响因素较多,剪枝的程度往往会影响到训练结果,因此,我们考虑由多决策树构成的随机森林算法,在数据集中挑选 70%的样本进行训练,在训练过程中给出每个位点的重要度评分,连续训练 300 次,每个位点的重要度评分叠加,最后对重要度评分进行排序,挑选出最有可能的致病位点。根据随机森林算法训练的结果,挑选数据集中 30%的样本进行预测,将预测结果与统计结果进行比较,以此对结果进行验证。

2.3、针对问题三

问题三是多位点共同作用的致病基因定位问题。 基因由若干个位点组成, 每个位点都可能对疾病造成影响。 在问题二中, 我们给出了与某种疾病相关的位点关联谱系, 在该谱系中, 有若干个可能性较大的致病位点, 每个位点的重要性评分已经给出, 因此, 我们根据重要性评分对这些位点致病的影响程度进行分级:及其严重,严重,中等,轻度,微度,共五个等级,给出相应的等级分数,并以这五个等级组成基因的致病程度影响因子。然后,我们依次导入 300 个基因的数据,参照位点的等级分数表,统计出每个基因五个致病程度影响因子的等级分数。我们假设每个可能的致病位点对疾病的影响程度是叠加的,不存在彼此抑制的情况。所以每个基因的致病程度是各个致病程度影响因子的加权叠加。接着,我们考虑利用熵值法求出每个致病程度影响因子的权重,并将每个基因的五个等级分数进行数据标准化,算出每个基因的标准化评分,根据标准化的综合评分挑选出若干个致病基因。

2.4、针对问题四

问题四是与形状相关联的致病位点定位问题。问题给出了某种疾病的十个相关形状的数据。首先,我们假设每种性状对于疾病的影响是相互独立的,影响程度是同等的。然后,我们对每个性状进行单独分析。对于每个性状,我们利用问题二的模型(随机森林),挑选出每个性状对应的 25 个可能的致病位点,十个性状共获得 250 个位点信息,组成位点数据集。接着,统计位点数据集中每个位点出现的频数及频率,对频数进行降序排序。最后,根据排序结果,挑选出若干个最有可能的致病位点。

3、后记

我们建模思路就如上面所述了,你们的了?虽然打了几天酱油,但还是收获还是不小的。首先是查找资料能力,生活中所遇到的问题以及自己所掌握的领域知识毕竟是有限的,当一个你见所未见的问题出现在你面前时,我们必须从现有文献资料中快速查找出相关问题解决的背景以及相关解决办法(短短几天,我们就阅读了知网以及google上四五十篇的文献);接着是阅读文献能力,自己的知识积淀的多少决定着你需要多久读懂文献的内容。我最大的感受就是书还是要多看一些的,尤其是数学方面的书,比如《统计学》之类的,我们所用的模型中,很多都是统计学里的方法。越往上走,我真是越觉得数学的强大。大数据,机器学习,模式分类,哪一样都跟数学有关,真是得数学者得天下呀!最后是编码实现的能力,我平时用的最多的就是C++语言,也会java,c#语言,偶尔也用用matlab,这次建模发现自己真的是个菜逼,井底之蛙,人一个物理院的用R语言,以及Python语言,代码写的飞起,我内心当时是崩溃的,脸被打的啪啪响。以后一定要扩大自己的知识面,可以不精,必须要懂,免得像个傻逼!

5 0