そっくりな双子の違い

  • 一卵性双生児は本当によく似ている。「前からも後ろからもクリソツ」だ、と言う。でも「性格は違うんですよ」とも。
  • 身体表現型の遺伝的制御は頑健で、精神表現型(脳神経ネットワーク)はそうでもない、ということだろう
  • モデルとしてはどんな風に考える?
  • 一番簡単には、精神表現型の発生・発達過程の確率過程とその進展空間の勝手気ままさをパラメタとして大きくとることが考えられる
  • それが真実かもしれないけれど、何か別の工夫をしてみる
  • 身体表現型は「相互作用」がないけれど、精神表現型は「相互作用」があることにして、その違いだけで、一つのプログラムなのに違いを生じない場合と生じる場合とを作り出してみる
  • ここで「相互作用」としては、「同じになったら、それを忌避する」という単純ルール

# 発達空間(2次元)の1辺の長さ
N <- 1000
# 酔歩の確率ベクトル
p <- c(0.2,0.3,0.3,0.2)
# 他人の確率ベクトル
p2 <- p
#p2 <- c(0.2,0.3,0.3,0.2)
# 酔歩の4歩のベクトル
vs <- matrix(c(1,0,0,1,-1,0,0,-1),byrow=TRUE,ncol=2)
# 離散時間シミュレーションの時刻数
n.iter <- 300
# 双子の2次元座標を長さ4のベクトルに納めて、それを時刻分、積み上げる
# Xは忌避パターン、X2は忌避しないパターン
X <- X2 <- matrix(0,n.iter,4)
# 初期値。双子は近い
X[1,] <- c(N/2,N/2-3,N/2,N/2+3)
X2[1,] <- X[1,]
# 他人
Y <- matrix(0,n.iter,2)
Y[1,] <- c(N/2,N/2)
for(i in 2:n.iter){
	tmp1 <- sample(1:4,1,prob=p)
	tmp2 <- sample(1:4,1,prob=p)

	tmpX1 <- X[i-1,1:2]+vs[tmp1,]
	tmpX2 <- X[i-1,3:4]+vs[tmp1,]
	
	d1 <- t(X[1:i-1,1:2])-tmpX2
	d2 <- t(X[1:i-1,3:4])-tmpX1
	d1. <- apply(d1^2,2,sum)
	d2. <- apply(d2^2,2,sum)
	# 相手がこれまでに通過した点は忌避する、という条件
	if(any(c(d1.,d2.)==0)){
		X[i,1:2] <- X[i-1,1:2]+vs[tmp1,]
		X[i,3:4] <- X[i-1,3:4]+vs[tmp2,]
		if(runif(1)<0.5){
			X2[i,1:2] <- X2[i-1,1:2]+vs[tmp1,]
			X2[i,3:4] <- X2[i-1,3:4]+vs[tmp1,]
		}else{
			X2[i,1:2] <- X2[i-1,1:2]+vs[tmp2,]
			X2[i,3:4] <- X2[i-1,3:4]+vs[tmp2,]
		}

	}else{
		X[i,1:2] <- X[i-1,1:2]+vs[tmp1,]
		X[i,3:4] <- X[i-1,3:4]+vs[tmp1,]
		X2[i,1:2] <- X2[i-1,1:2]+vs[tmp1,]
		X2[i,3:4] <- X2[i-1,3:4]+vs[tmp1,]
	}
	# 他人
	tmp3 <- sample(1:4,1,prob=p2)
	Y[i,] <- Y[i-1,]+vs[tmp3,]
}

par(mfcol=c(1,2))
XX <- rbind(X[,1:2],X[,3:4])
plot(XX,type="p",col=rep(2:3,each=n.iter),pch=rep(c(20,20),each=n.iter),main="相互作用アリ")
XX2 <- rbind(X2[,1:2],X2[,3:4])
plot(XX2,type="p",col=rep(2:3,each=n.iter),pch=rep(c(20,20),each=n.iter),main="相互作用ナシ")
par(mfcol=c(1,1))

#Y[,1] <- Y[,1]-(max(Y[,1])-min(XX[,1]))
#Y[,2] <- Y[,2]-(max(Y[,2])-min(XX[,2]))
#XXY <- rbind(X[,1:2],X[,3:4],Y)
#plot(XXY,type="p",col=rep(2:4,each=n.iter),pch=rep(c(20,15,1),each=n.iter))