- 家系図は、個人の遺伝的伝達を図示したもの
- 染色体上のアレルも伝達される。
- 染色体数を固定する。すべての染色体がペアを作って、そのペアに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)
}