機器學習&數據挖掘筆記_18(PGM練習二:貝葉斯網絡在遺傳圖譜在的應用)


 

  前言:

  這是coursera課程:Probabilistic Graphical Models 上的第二個實驗,主要是用貝葉斯網絡對基因遺傳問題進行一些計算。具體實驗內容可參考實驗指導教材:bayes network for genetic inheritance. 大家可以去上面的鏈接去下載實驗材料和stard code,如實驗內容有難以理解的地方,歡迎私底下討論。下面是隨便寫的一些筆記。

  完成該實驗需要了解一些遺傳方面的簡單知識,可參考:Introduction to heredity(基因遺傳簡單介紹)

 

  關於實驗的一些約定和術語:

  同位基因(也叫等位基因)中有一個顯現基因(dominant allele)和一個隱性基因(recessive allele)。

  homozygous:純合體

  heterozygous:雜合體

  一個factor表不僅可以表示聯合概率,也可以表示條件概率,這里約定規則是: 最左邊的那個元素表示條件輸出,即它是在后面元素出現條件下的輸出。

  關於變量的命名,因為在圖模型中,會出現很多變量,這些變量在實際編程中是要取名字的,一般是按照某種順序規則來取,本次實驗的規則是:依照家譜圖中每個人的名字依次取,假設有k個人,則每個人對應了2個factor,所以前k個變量表示這k個人的基因型標量,后k個變量表示這k個人的表現型變量。如果把每個人的基因對應的2個染色體分開考慮,則需要3k個變量,前k個表示每個人的第一條染色體對應處的基因,中間k個表示每個人的第二條染色體對應處的基因,后k個變量和以前的一樣,表示這k個人的表現型變量。

  程序中的alleleFreqs是個n*1的向量,n為單個等位基因的個數。

  程序中的alphaList是個m*1的向量,m為2個等位基因組合的個數。

  例如,某個基因家譜圖可如下:

   

 

  matlab知識:

  matlab在使用元胞數組時,需要先用cell來定義大小。對元胞使用小括號訪問時返回的是對應位置的數據類型,而不是其內容,要想得到其內容,需要用大括號訪問。

  結構體的定義要么直接對其賦值,這時候需調用其field,要么用關鍵字struct來定義。

  tf = isfield(S, 'fieldname'):

  tf=1表示結構體成員S中含有變量fieldname.

 

  實驗中的一些函數:

  phenotypeFactor = phenotypeGivenGenotypeMendelianFactor(isDominant, genotypeVar, phenotypeVar):

  練習1需要完成的內容。該函數功能是生成一個factor,該factor每一項是一個條件概率,表示在基因類型變量(genotypeVar)下的表現類型(phenotypeVar)的概率,即P(person’s phenotype | person’s genotype)。其概率值是按照孟德爾模型(mendelian model)來分配的。

  v = GetValueOfAssignment(F, A):

  得到facotr F在assignment A處的值。

  F = SetValueOfAssignment(F, A, v):

  該函數實現對factor F的一個assignment對應的值進行更新,更新后的值為v.注意一定要將這個函數的返回值賦給F才有效。

  phenotypeFactor = phenotypeGivenGenotypeFactor(alphaList, genotypeVar, phenotypeVar):

  練習2需要完成的內容。這個函數也是實現表現型在基因型下的條件概率,但此時概率不一定為0或者1,因為不嚴格滿足孟德爾模型,所以參數列表中多了一個alphaList變量,該變量存儲的是各種基因型下出現某種病的概率值。genotypeVar, phenotypeVar分別為基因類型變量和表現型變量,僅僅是個變量名而已。

  [allelesToGenotypes,genotypesToAlleles]= generateAlleleGenotypeMappers(numAlleles):

  numAlleles為等位基因的個數,假設個數為n,則allelesToGenotypes為一個n*n的矩陣,代表的是2不同等位基因組合后的編碼(行號和列號分別代表這2個基因序號),因為這個編碼矩陣是對稱的,所以只有m=n*(n-1)/2+n個編碼。genotypesToAlleles為一個m*2大小的矩陣,每一行的兩個元素代表該基因編碼下的2個基因序號。

  [allelesToGenotypes,genotypesToAlleles]= generateAlleleGenotypeMappers(numAlleles):

  用同位基因的個數numAlleles作為參數,來產生2個矩陣。其中allelesToGenotypes(i,j)表示編號為i的同位基因和編號為j的同位基因在基因類型(每個基因類型由2個基因構成)中的序號。 genotypesToAlleles由2列構成,每一行對應一個基因類型的序號,這2個列元素表示該基因序列對應的2個同位基因的編號。

  genotypeFactor = genotypeGivenAlleleFreqsFactor(alleleFreqs, genotypeVar):

  練習3需要完成的內容。某個基因可能有多個等位基因,而每個等位基因的概率不同,概率值保存在alleleFreqs中。這個函數的作用就是由這些等位基因組合產生的每個基因類型的概率,這相當於一個先驗分布,因為沒有去考慮由父母親的基因交叉得到下一代。genotypeVar表示這個基因類型的變量名。

  genotypeFactor=genotypeGivenParentsGenotypesFactor(numAlleles, genotypeVarChild, genotypeVarParentOne, genotypeVarParentTwo):

  練習4需要完成的內容。該函數的作用是已知父親和母親某個等位基因的分布,求出兒子對應基因的概率分布。其中numAlleles是等位基因的個數,genotypeVarChild, genotypeVarParentOne, genotypeVarParentTwo分別表示兒子,父親,母親對應的基因變量。輸出的genotypeFactor是一個變量值val為3維矩陣的factor. 這個函數與上面那個函數不同,這里的輸出factor是在考慮了父母親factor情況下的。

  factorList = constructGeneticNetwork(pedigree, alleleFreqs, alphaList):

  練習5需要完成的內容。在給定家譜(家譜中包含了成員的名字,父母親等信息)pedigree、等位基因的概率分布alleleFreqs、不同基因組合導致生並的概率分布alphaList后,就可以求出這個家庭中每個成員的2個factor:一個是關於自己的基因類型的,這由其父母親的基因類型決定;另一個是關於自己的表現類型的,這與他的基因類型有關。在完成該函數的代碼中會調用前面的函數genotypeGivenAlleleFreqsFactor(), genotypeGivenParentsGenotypesFactor(), phenotypeGivenGenotypeFactor().所以前面很多工作都是為后面服務的。

  phenotypeFactor=phenotypeGivenCopiesFactor(alphaList, numAlleles, geneCopyVarOne, geneCopyVarTwo, phenotypeVar):

  練習6所需完成的內容。geneCopyVarOne和geneCopyVarTwo一個來自母親的基因,一個來自父親的的基因。phenotypeVar為下一代表現型標量。該函數的作用是給定來自父母親的2個基因,求這個組合下的下一代出現病的概率,當然了,因為不服從孟德爾模型,所以還需要參考概率值alphaList.

  geneCopyFactor = childCopyGivenFreqsFactor(alleleFreqs, geneCopyVar):

  該函數的作用是得獲得染色體中一個等位基因的概率,該概率來源於通用的先驗alleleFreqs. 該factor表格大小為n*1.

  geneCopyFactor = childCopyGivenParentalsFactor(numAlleles, geneCopyVarChild, geneCopyVarOne, geneCopyVarTwo):

  該函數的作用也是得獲得染色體中一個等位基因的概率,只是這取決於父母親各自那個等位基因。所以這個factor表格大小為n*3,且每個條件概率只可能取3個     值:0, 0.5, 1.

  factorList = constructDecoupledGeneticNetwork(pedigree, alleleFreqs, alphaList):

  實驗7所需完成內容。該函數是構造Decoupled的貝葉斯網絡,這里的Decoupled是指家譜中每個人染色體的2個等位基因分布來考慮。所以每個人都對應有3個factor,一個是基因1的概率,n*3大小(如果家譜中沒有父母親,則是n*1大小),一個是基因2的概率,n*3大小(如果家譜中沒有父母親,則是n*1大小),另一個是對應的表現型分布2n^2*3大小。

  phenotypeFactor=constructSigmoidPhenotypeFactor(alleleWeights, geneCopyVarOneList, geneCopyVarTwoList, phenotypeVar):

  這是練習8的內容。一種病可能由多個基因決定,而每個基因又可能有多個等位基因。這里的alleleWeights矩陣中alleleWeights{i}(j)表示的意思是第i個基因的第j號等位基因對這種病的影響權值。當把某種病對應的所有基因的等位基因權值都考慮進來,那么得這種病的概率則與這些權值之和有關,本實驗假設它們最后的關系是服從sigmoid分布。geneCopyVarOneList和geneCopyVarTwoList都是列向量(因為一種病可能由多個基因決定),所以在計算phenotypeFactor.var時需要這2個向量轉置。

 

  課件中的一些內容:

  貝葉斯推理的3種形式:因果推理,證據推理,內部因果推理(注意explean away現象)。

  active trail(路徑中不能出現V型結構,除非V型中間節點或者其子孫節點被觀測到)。

  變量之間的獨立性判斷、條件獨立性判斷(可以通過聯合概率與某2個factor的乘積的關系來判斷)。

  一個圖能夠被因式分解,則有可能推導出獨立性。如果有D-separation,則一定可以推導出獨立性。

  分布P能夠分解圖G ,則G是P的一個I-map,反之,如果G是P的一個I-map,則P能分解G.

  為了簡化時序模型,一般會有馬爾科夫和時序不變性這2個假設。

  時序轉移模型(Template Transition Model),可以包含內部時序轉移和外部時序轉移。

  Ground Network(unrolled network)指的是不同時間內的結構依次復制。

  2TBN是一個動態貝葉斯網絡,它有一個初始化以及unrolled network,所以有2個轉移概率。

  HMM中的狀態轉移概率是稀疏的。

  Plate model可以嵌套,可以重疊

 

  參考資料:

       Introduction to heredity(基因遺傳簡單介紹)

       coursera課程:Probabilistic Graphical Models 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM