1. 程式人生 > >數學建模,我也總算是參加過的人了

數學建模,我也總算是參加過的人了

大學四年都沒有參加過數學建模比賽,對於我這種天不怕地不怕,扛起火槍就死命往前衝的人來說,沒有去感受一下那種被虐的體無完膚的感覺,實在是一種遺憾。終於在研究生期間,讓我逮著了機會。前段時間一個數學院的女生向我請教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語言,程式碼寫的飛起,我內心當時是崩潰的,臉被打的啪啪響。以後一定要擴大自己的知識面,可以不精,必須要懂,免得像個傻逼!