アレルの分岐図

  • 家系図は、個人の遺伝的伝達を図示したもの
  • 染色体上のアレルも伝達される。
    • いくつも木ができる
  • 染色体数を固定する。すべての染色体がペアを作って、そのペアに2本の新たな染色体を作らせる経過で、木がどうなるかを描かせてみる
  • ローカスの移動に伴って、ぱらぱらアニメのような感じで表示される。
  • 横軸が染色体、縦軸が上に向かって新しい世代
ARGsim<-function(n=8,g=5,l=6,r=r){
 ids<-1:n
 now<-1:n
 parents<-rep(0,n*g*l)
 data<-rep(0,n*g*l)
 for(i in 1:n){
  data[(1+(i-1)*l):(i*l)]<-i
 }
 count<-1+n*l
 for(i in 2:g){
  tmp<-sample(ids,replace=FALSE)
  for(j in 1:(n/2)){
   countinside<-1
   for(x in 1:2){
    first<-1
    if(runif(1)>0.5){
     first<-2
    }
    data[count]<-now[tmp[(j-1)*2+first]]
    parents[count]<-tmp[(j-1)*2+first]
    now[countinside]<-data[count]
    count<-count+1
    countinside<-countinside+1
    for(k in 1:(l-1)){
     if(runif(1)<r){
      first<-first+1
      if(first==3){
       first<-1
      }
     }
     data[count]<-now[tmp[(j-1)*2+first]]
     parents[count]<-tmp[(j-1)*2+first]
     now[countinside]<-data[count]
     count<-count+1
     countinside<-countinside+1
    }
   }
  }
 }

 return(list(allele=matrix(data,nrow=l),parents=matrix(parents,nrow=l)))
}
n<-20
g<-10
l<-200
r<-0.5
d<-ARGsim(n=n,g=g,l=l,r=r)
mmm<-matrix(d$parents[1,],ncol=g)


plotSlice<-function(m){
 points<-which(m>=0,arr.ind=TRUE)
 plot(points[,1],points[,2])
 for(i in 2:length(m[1,])){
  for(j in 1:length(m[,1])){
   segments(m[j,i],i-1,j,i)
  }
 }

}
locus<-seq(from=1,to=101,by=10)

PlotSerial<-function(m,locus,g){
 for(i in locus){
  mmm<-matrix(m[i,],ncol=g)
  plotSlice(m=mmm)
 }
}
PlotOverlap<-function(m,locus,g){
 for(i in locus){
  mmm<-matrix(m[i,],ncol=g)
  par(new=T)
  plotSlice(m=mmm)
 }
}
PlotSerial(d$parents,locus=locus,g=g)
PlotOverlap(d$parents,locus=locus,g=g)


for(i in 1:l){
 mmm<-matrix(d$parents[i,],ncol=g)
 plotSlice(m=mmm)
}