多型性の維持

  • 昨日の続き
  • ライフゲームにアイディアをとって、多型性の維持のモデル化を考える
  • モデルなので、こんなに簡単でいいの?というレベルを目指す
  • 敢えて、2倍体とか有性生殖とかも考慮しないで行うことを考える
  • 想定しているのは、HLA領域の多型性のことなど
  • モデル
    • 仮定
      • 異なる種類の虫がいる
      • 虫は円周状の1次元格子空間に存在する
        • 空間は円周状に閉じている
      • 異なる種類の虫は、同じ場所に共存できる
      • 同一種類の虫は、同じ場所には1匹しか存在できない
      • 1か所に存在できる虫の数は制約がある
        • 少なすぎる場合と多すぎる場合とのどちらの場合も、虫は全滅する
      • 虫は、常に、増えようとする
        • 隣の格子に自分と同種の虫がいないとき、そこに自分の子を産む(ただし、確率的に)
  • 遺伝的アナロジー(細かいことを挙げると、何が何を表しているのか、うまく説明がつかない点があることは承知の上。多様度の維持とその変遷に関するシミュレーションのみを考える)
    • 異なる種類とは、座位のこと
    • 虫とは、アレルのこと
    • 空間とは、染色体の繁殖空間のこと
      • ある場所で虫が全滅するとは、そこの染色体が生存に失敗したことを意味する
      • 染色体がいない「空き空間」には、常に、新規の染色体を生じさせる力(繁殖力)がある
  • 掲載図は、横軸に空間、縦軸に虫の種類で、時間経過を追って映画にしてある

http://www.genome.med.kyoto-u.ac.jp/StatGenet/moromoro/20101209-4.gif

Nx<-100 #1次元格子
Nm<-100 #座位数(虫の種類数)
Nt<-2000 #世代数

A<-array(0,c(Nx,Nm,Nt))

#初期の虫分布
Xrange<-(Nx/2-20):(Nx/2+20)
st<-sample(Xrange,Nm,replace=TRUE)
end<-sample(Xrange,Nm,replace=TRUE)


for(i in 1:Nm){
	A[st[i]:end[i],i,1]<-1
}

image(A[,,1])

# 生存条件
LoL<-0.2*Nm
UpL<-0.8*Nm

S<-apply(A[,,1],1,sum)

dead<-((S<=LoL) + ( S>=UpL))

A[which(dead==1),,1]<-0



image(A[,,1])


for(i in 2:Nt){
	A[,,i]<-A[,,i-1]
	for(j in 1:Nx){
		# 空間を閉じるための処理
		pre<-j-1
		post<-j+1
		if(pre<1)pre<-Nx
		if(post>Nx)post<-1
		for(k in 1:Nm){
			if(A[j,k,i]==0){
				if(A[pre,k,i-1]==1 || A[post,k,i-1]==1){
					A[j,k,i]<-sample(c(0,1),1)
					#A[j,k,i]<-1
				}
			}

		}
	}
	S<-apply(A[,,i],1,sum)

	dead<-((S<=LoL) + ( S>=UpL))

	A[which(dead==1),,i]<-0

	image(A[,,i])

}

for(i in 1:Nt){
	filenum=10000+i
	filename=paste("test",filenum,".jpeg",sep="")
	jpeg(file=filename)
	image(A[,,i])
	dev.off()
}