##２．感染ウイルスゲノム数とウイルスの適応スピードの関係のシミュレーションに用いるRスクリプト
## 初期設定
ira <- 0.2　# Cell-0の適応的なゲノムの比率
Nv <- c(5,10,20,50,100) # シミュレートするN　
nmax <- 10　# 細胞間移行の回数

cells <- 10000 # 細胞内集団の数
results <- matrix(rep(0,(nmax+1)*length(Nv)),nrow=length(Nv)) # 結果を格納するtableを作成

##Nvに含まれる異なるNでシミュレートする
for (i in 1:length(Nv)){

	N <- Nv[i] # Nを代入
	table <- matrix(rep(0,4*cells),nrow=cells)　#細胞内集団の状態を記録するtableを作成。行数は細胞内集団数、列数は4。
	table[,3] <- c(rep(ira,cells))　# 3列目は適応的なゲノムの比率。初期値は上で指定したira
	n <- 0　#細胞間移行数。初期値は0
	
	##細胞間移行数がtmaxに達するまでシミュレートする
	while (n <= nmax){
		results[i,n+1] <- mean(table[,3]) #適応的なゲノムの比率の平均値を記録
		s <- 1/(1+exp((0.3-table[,3])*30)) #Sの計算
		table[,4] <- rbinom(c(rep(1,cells)),1,s) #Sに応じて感染成立／失敗をランダムに決定
		table[,4] <- replace(table[,4],which(table[,4]==0),NA) #感染失敗したところにNAを代入
		table <- na.omit(table) #NAの入った行（感染失敗した行）を削除
		alive <- nrow(table) #残っている行数（感染成功した行）を数える
		table[,1] <- rbinom(c(rep(1,alive)),N,table[,3]) #新しい細胞で感染を成立するNゲノムのうち適応的なゲノムの数をランダムに決定
		table[,2] <- N-table[,1]　#Nゲノムのうち適応的でないゲノムの数
		table[,3] <- table[,1]/N　#新しい細胞での適応的なゲノムの比率

		##感染に失敗した細胞系列（cells-alive）の空きについて、感染に成功した系列からランダムに選んで埋め合わせる
		cn <- sample(1:alive,cells-alive,replace=T,prob=NULL)
		table <- rbind(table,table[cn,])
		n <- n+1
	}
}

## 作図
plot(0,ira,xlim=c(0,nmax),ylim=c(0,1),xlab="cell-to-cell movements",ylab="ratio of adaptive genomes",cex.lab=1.5,cex.axis=1.5,type="n")
for (i in 1:length(Nv)){
	points(0:nmax,results[i,],type="b",pch=i,cex=2,lwd=2)
}

