- 家系図がある
- 常染色体の場合は、子の染色体は母方・父方の2本ある
- ●方の染色体は親●の2本の染色体のいずれかである
- いずれかであるけれど、そのどちらかがわからないとき、両方と辺でつなぐ
- このようにすると、個人間の血縁関係で作ったグラフが複数のグラフに分離する(血族婚がない場合)
- どのように分離するか
- 「母方」のグラフと「父方」のグラフ
- 子を産むと、その生まれた子の「親」の母方グラフと父方グラフが連結する
- このようなグラフを2通りの表現で作ってみる
- 個人の家系情報は3列の行列にあるとする(第1列はシーケンシャルID、第2列は母ID,第3列は父ID)
- 染色体グラフは、人数の2倍のノードに関する正方行列で表現すれば、こちら
MakeHaplotypeGraph<-function(p){
ns<-length(p[,1])
m<-matrix(0,2*ns,2*ns)
for(i in 1:ns){
tmpmom<-p[i,2]
tmpdad<-p[i,3]
if(tmpmom!=0){
m[2*i-1,2*tmpmom-1]<-m[2*i-1,2*tmpmom]<-1
}
if(tmpdad!=0){
m[2*i,2*tmpdad-1]<-m[2*i,2*tmpdad]<-1
}
}
sign(m+t(m))
}
MakeHaplotypeGraph(p)
MakeHaplotypeGraph(p)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 0 0 0 1 0 1 0 1
[2,] 0 0 0 0 0 1 0 1 0 1
[3,] 0 0 0 0 1 0 1 0 1 0
[4,] 0 0 0 0 1 0 1 0 1 0
[5,] 0 0 1 1 0 0 0 0 0 0
[6,] 1 1 0 0 0 0 0 0 0 0
[7,] 0 0 1 1 0 0 0 0 0 0
[8,] 1 1 0 0 0 0 0 0 0 0
[9,] 0 0 1 1 0 0 0 0 0 0
[10,] 1 1 0 0 0 0 0 0 0 0
- 染色体本数のノードの親側染色体ノード2列に納めた、「染色体本数」x「2」行列なら
MakeHaplotypeGraph2<-function(p){
ns<-length(p[,1])
ret<-matrix(0,ns*2,2)
for(i in 1:ns){
tmpmom<-p[i,2]
tmpdad<-p[i,3]
ret[2*i-1,1]<-2*tmpmom-1
ret[2*i-1,2]<-2*tmpmom
ret[2*i,1]<-2*tmpdad-1
ret[2*i,2]<-2*tmpdad
}
ret[which(ret<0)]<-0
ret
}
MakeHaplotypeGraph2(p)
> MakeHaplotypeGraph2(p)
[,1] [,2]
[1,] 0 0
[2,] 0 0
[3,] 0 0
[4,] 0 0
[5,] 3 4
[6,] 1 2
[7,] 3 4
[8,] 1 2
[9,] 3 4
[10,] 1 2