DNA鑑定

1倍体を単位として計算量を減らすアプローチ

概要 ハプロタイプグラフ 家系図(2倍体の伝達関係)から1倍体の伝達の様子(ハプロタイプグラフ)を作る 家系図はすべての個人がつながっているが、ハプロタイプグラフはつながっていない 母方と父方のグラフに分かれる 「子はかすがい」 「子が産まれると…

地道な計算方法

ある集団のジェノタイプ頻度情報が与えられている その集団において、ジェノタイプ情報つきの家系がどのくらいの頻度で存在しているかを計算する 独立した座位は座位ごとに計算して、積をとる 家系内には「集団から直接生まれた子」がいる 家系内の「集団か…

確率計算。そのアプローチ、2つの比較

地道な方法は計算が終わらない 地道に計算しないで、同じ値を算出したい やり方1 地道なやり方では、すべての個人がすべてのジェノタイプを取りうるというところからスタートした 家系情報とジェノタイプが与えられると、ジェノタイプが確定している人は、…

DNA鑑定の仮説について

家系全体を集団の子、とする 集団がある 家系図があって、その家系図上の人物のDNA情報がある 今、DNAがあって、それが家系図上のある人物のそれである(仮説1)かもしれないし、そうでなく、家系と無関係の人物のそれである(仮説2)かもしれない 仮説2は、DNA…

伝達の場合分けと父方・母方の場合分けで網羅する

法数学勉強会(こちら)のネタ 目次 DNA鑑定の仮説について 地道な計算方法 確率計算。そのアプローチ、2つの比較 2倍体を単位として計算量を減らすアプローチ 1倍体を単位として計算量を減らすアプローチ 1倍体で場合分け ソース ベータ版

染色体グラフ

家系図がある 常染色体の場合は、子の染色体は母方・父方の2本ある ●方の染色体は親●の2本の染色体のいずれかである いずれかであるけれど、そのどちらかがわからないとき、両方と辺でつなぐ このようにすると、個人間の血縁関係で作ったグラフが複数のグ…

フェーズを決めたら、染色体グラフは木の集合になる

染色体の伝達が未確定のとき、染色体グラフは分岐を持つが、確定すると、木の集合になる Rでやれば: # sepGraphsと伝達パターンから、木を作って取り出す SelectTrees<-function(sepG,v){ ret<-list() for(i in 1:length(sepG)){ tmp<-sepG[[i]][,1:2] for(…

染色体グラフの伝達選択数

染色体グラフは子染色体は由来二親染色体と結ばれている これを分岐と呼ぶことにする グラフにいくつの分岐があるかを数える sepGraphs<-SeparateGraphs(hG) # 分けたグラフごとにいくつの分岐があるかを数える numBifperGraph<-rep(0,length(sepGraphs)) fo…

染色体グラフの連結グラフに番号をつける

染色体グラフは複数のグラフの集まりである(ことが多い。血族婚などで一つにつながることもある) 個々の連結グラフに番号をつけよう SeparateGraphs<-function(hG){ ns<-length(hG[,1]) assigned<-rep(0,ns) cnt<-1 for(i in 1:length(hG[,1])){ if(hG[i,1]!…

染色体グラフからフェーズを場合分け

染色体グラフでは、染色体ノードは由来親の2本の染色体と辺で結ばれていた 実際は、その2辺のうちの片方が真実であるので、片方のみが存在している どの染色体の親子関係もそういう50:50の関係であるから、染色体親子関係Nについて通りの取り方があって、…

始祖比率

個人の常染色体は母由来のそれと父由来のそれとの2本ある 家系がある 家系のジェノタイプ情報を考えるとき、ジェノタイプが判明している場合と判明していない場合がある ジェノタイプが判明していない家系内メンバーであり、かつ、父母のどちらも知られてい…

実行コマンド

SMMFout<-SearchMissingsMultiFamily(pedigrees=pedigrees,genotypesFamily=genotypesFamily,Gpool=Gpool2,candidatesList=candidatesList,FamilyNames=FamilyNames,IndNames=IndNames,Alleles=Alleles,Probs=Probs) for(ip in 1:length(pedigrees)){ print(…

デモデータ

pedigrees<-list() # 同胞 pedigrees[[1]]<-matrix( c(1,2,3,4, 0,0,1,1, 0,0,2,2, 1,0,0,1, 3,3,1,2), ncol=5) # Trio pedigrees[[2]]<-matrix( c(1,2,3, 0,0,1, 0,0,2, 1,0,0, 1,3,2), ncol=5) pedigrees[[3]]<-matrix( c(1:8, 0,0,1,0,3,3,3,3, 0,0,2,0,4…

ソース

# 依存パッケージ library(kinship) library(MCMCpack) library(gtools) library(sets) library(paramlink) # 家系情報からkinshipパッケージのpedigreeオブジェクトを作る # p # 第1カラム:ID # 第2カラム:母 # 第3カラム:父 # 第4カラム:性別 0:…

鑑定しよう

昨日の記事のファイル置き場 関数セットのファイル デモデータ 実行ファイル 解説PPT

マルチ家族の情報を受け入れて処理・家族ごとに処理

# pedigreeごとに # 家系情報 # 生存・協力者のジェノタイプ情報 # 被捜索者ごとに、身元不明者リスト中の候補者がリストアップされている SearchMissingsMultiFamily<-function(pedigrees,genotypesFamily,Gpool,candidatesList,FamilyNames,IndNames,Allel…

デモデータの作成

家系を与える 家系が満足するジェノタイプデータを作る 一部の家系メンバーのジェノタイプデータが欠けたデータを作る HWEを満足する集団のジェノタイプデータを作る 候補者のジェノタイプデータを家系メンバーのうちのジェノタイプが欠けたメンバーのジェノ…

鑑定を動かしてみる

昨日の記事の実践編 デモデータの作成 マルチ家族の情報を受け入れて処理・家族ごとに処理

ディプロタイプの事前確率を考慮する

核家族ごとに、取りうるディプロタイプの組み合わせごとに確率を計算することを前記事で書いた ディプロタイプがわかっている人の場合は、ただ1つのディプロタイプが確率1で決まっている ディプロタイプが与えられていないメンバーの場合、親が不明な場合…

核家族ごと・ディプロタイプを固定して、確率・尤度を計算

核家族のディプロタイプが与えられたとき、その尤度は、両親のディプロタイプから、子のディプロタイプが生まれる確率を計算する 子が複数のときは、子ごとに確率を計算して、それを掛け合わせる 核家族のメンバーが取りうるディプロタイプがわかっていると…

核家族の確率・尤度をピボットで連結する

SumPivot<-function(cpnout,like,info){ ret<-NULL #pivotted<-set() #pivotted<-list() pivotted<-rep(0,length(info)) cumulProb<-list() for(nn in 1:length(cpnout)){ tmpdim<-dim(cpnout[[nn]][[1]]) tmp<-rep(1,tmpdim[1]) if(pivotted[[cpnout[[nn]][…

核家族ごとにディプロタイプ総当たり条件の確率・尤度を計算する

LikeNucWithPrior<-function(cpnout,nucs,DiplotypePrior){ prob<-list() for(nn in 1:length(nucs)){ nucDimVector<-cpnout[[nn]][[2]] tmp<-DiplotypePrior[[nucDimVector[1]]] for(i in 2:length(nucDimVector)){ tmp<-tmp%o%DiplotypePrior[[nucDimVecto…

候補者がたくさんいて、網羅的に探すときはメンデリアンチェックで絞り込む

library(paramlink) tmpPed<-p[,1:5] tmpPed<-data.frame(ID=tmpPed[,1],FID=tmpPed[,3],MID=tmpPed[,2],SEX=tmpPed[,4]+1,AFF=tmpPed[,5]-1) tmpPed<-linkdat(tmpPed,model=1) # 候補者を当てはめて確定したジェノタイプがtmpG2 tttmpG<-tmpG2[,,1] for(i i…

DNA鑑定のためのマーカーデータ処理

目次 1. 家系を扱おう 2.マーカーごとに可能なディプロタイプ・ハプロタイプを選ぶ 3.考慮するアレルで絞る 4.核家族ごと・ディプロタイプを固定して、確率・尤度を計算 5.ディプロタイプの事前確率を考慮する 6.核家族ごとにディプロタイプ総当た…

マーカーごとに可能なディプロタイプ・ハプロタイプを選ぶ

マーカーが相互に独立な場合には、個々のマーカーに関して確率・尤度を計算して、積を取ることができる ゲノム全体にぱらぱらと置いたIdentifilerの場合には、この仮定でよい マーカーごとに次のように考える アレル数がのとき、ディプロタイプのタイプ数は…

考慮するアレルで絞る

ここにもあるように、マーカーのアレル数は非常に多い それは、アレル数が多い方が、伝達に関する情報が多く、鑑定の力が強いからである しかしながら、組み合わせ計算においては、場合の数を膨大にする源である 家系の解析で、気になるアレル(家系内に存在…

日本人のためのIdentifilerアレル情報

尤度計算に用いるアレル頻度 IdentifilerというDNA鑑定キットがある 15個のSTRマーカーを使う それの日本人のアレル頻度に関しては、[J Forensic Sci. 50(3): 718-719.:title=こちら]の報告がある。ちなみにSTR頻度に関してこちらのサイトもある 日本人270…

家系を扱おう

家系情報を作る 家系情報は行列にする 行の順番は時系列を守ること 後述するように、尤度・確率の計算では、核家族を分離して計算することで計算量を減らすように作っている。したがって、家系図にループがある場合には、後半が対応していないことに留意する…

複数いる尤度解析対象者、複数いる候補者、これらを網羅的に組み合わせる

CalcLikeForCandidates<-function(p,G,candidates,Gcandidates,Alleles,Probs){ # Gpoolの候補者が「ポピュレーションで観察される確率」をあらかじめ算出しよう LikeFromGenPop<-rep(0,length(Gpool2[,1,1])) for(i in 1:length(Alleles)){ tmp<-OffspringG…

複数のマーカーの確率・尤度を合わせる

CalcLikeZ<-function(p,G,nucs,Alleles,Probs){ tmpret<-0 for(na in 1:length(Alleles)){ A<-unlist(Alleles[[na]]) P<-Probs[[na]] g<-G[,,na] gpool<-G[,,na] #A2P2<-LimitAlleles(g,A,P) A2P2<-LimitAlleles(gpool,A,P) A2<-A2P2[[1]] P2<-A2P2[[2]] #LD…