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

  • 染色体グラフでは、染色体ノードは由来親の2本の染色体と辺で結ばれていた
  • 実際は、その2辺のうちの片方が真実であるので、片方のみが存在している
  • どの染色体の親子関係もそういう50:50の関係であるから、染色体親子関係Nについて2^N通りの取り方があって、それに応じて、染色体グラフ、複数の木の集合(森)のグラフに直せる
  • 森グラフを辺リストで表すと以下の通り
hG<-MakeHaplotypeGraph2(p)

# 由来親染色体を選択するべきノードID
Alt<-which(hG[,1]!=0)
# その数
nAlt<-length(Alt)
# 選択の場合を列挙
s<-expand.grid(rep(list(c(1,2)),nAlt))

for(i in 1:(2^nAlt)){
	tmp<-matrix(0,nAlt,2)
	for(j in 1:nAlt){
		tmp[j,1]<-Alt[j]
		tmp[j,2]<-hG[Alt[j],s[i,j]]
	}
	print(tmp)
}
     [,1] [,2]
[1,]    5    3
[2,]    6    1
[3,]    7    3
[4,]    8    1
[5,]    9    3
[6,]   10    1
     [,1] [,2]
[1,]    5    4
[2,]    6    1
[3,]    7    3
[4,]    8    1
[5,]    9    3
[6,]   10    1
     [,1] [,2]
[1,]    5    3
[2,]    6    2
[3,]    7    3
[4,]    8    1
[5,]    9    3
[6,]   10    1
# ... 以下続く