ESL2章
figure 2.4について
library(MASS) blue_ave<-c(1,0) red_ave<-c(0,1) blue<-mvrnorm(100,blue_ave,diag(2)) red<-mvrnorm(100,red_ave,diag(2)) cl<-factor(c(rep("blue",100),rep("red",100))) train<-rbind(blue,red) test<-rbind(mvrnorm(5000,blue_ave,diag(2)/5),mvrnorm(5000,red_ave,diag(2))/5) test_answer<-c(rep("blue",5000),rep("red",5000)) test_error<-c() for (i in 1:200){ classres <- knn(train,test,cl,k=i,prob=T) test_error<-c(test_error,length(which(classres==test_answer))) } plot(1-test_error/10000) train_answer<-c(rep("blue",100),rep("red",100)) train_error<-c() for (i in 1:200){ classres <- knn(train,train,cl,k=i,prob=T) train_error<-c(train_error,length(which(classres==train_answer))) } plot(1-train_error/200) plot(1-test_error/10000,type="l",ylim=c(0,0.5),xlab="",ylab="") par(new=T) plot(1-train_error/200,col="red",type="l",ylim=c(0,0.5),xlab="赤=training 黒=test",ylab="間違えた割合") plot(blue,col="blue",xlim=c(-3,3),ylim=c(-3,3),xlab="",ylab="") par(new=T) plot(red,col="red",xlim=c(-3,3),ylim=c(-3,3),xlab="",ylab="")
ルードヴィッヒモデル
検索してもあまりいいページ出てこなかったですが式は以下の通り
library(deSolve)# 微分方程式の数値解法パッケージ #n:個体数 k:飽和数 s:食傷捕食数 r:再生産率 parameters <- c(k = 100, s = 1, r=0.1)# パラメータのセット initial <- c(n=5)# 初期条件 times <- seq(0, 100, 1)# 差分刻み Ludwig <- function(t,state, parameters) { with(as.list(c(state, parameters)), { dn <- r*n*(1-n/k)-s*n^2/(1+n^2) return(list(c(dn))) }) } # deSolveを使った数値積分を out に出力 out1 <- ode(y = initial, times = times, func = Ludwig, parms = parameters) parameters <- c(k = 100, s = 1, r=0.2) out2 <- ode(y = initial, times = times, func = Ludwig, parms = parameters) parameters <- c(k = 100, s = 1, r=0.3) out3 <- ode(y = initial, times = times, func = Ludwig, parms = parameters) parameters <- c(k = 100, s = 1, r=0.4) out4 <- ode(y = initial, times = times, func = Ludwig, parms = parameters) parameters <- c(k = 100, s = 1, r=0.5) out5 <- ode(y = initial, times = times, func = Ludwig, parms = parameters) out<-cbind(out1,out2[,2],out3[,2],out4[,2],out5[,2]) matplot(out,type="l")
r=0.202前後でカタストロフィー変化が生じる
このモデルでは初期状態と再生産率rでの値が決まる
1.2 複雑な変化
周期関数の振幅をα倍、周期数をβ倍していき、その級数和をとると、ワイエルシュトラス関数とよばれ、
と表せる。
ホワイトノイズはこれで表現できる。
で、時間軸と関数値軸を異なるスケール変換しているので、自己アフィン相似性とよぶ。
s<-0.1 T<-1:100*s N<-50 alpha<-2/3 beta<-2 x<-c() ax<-c() #x(t)の計算 for(i in 1:length(T)){f<-function(x,i){(alpha^(x+1))*cos((beta^(x))*i*s)} x[i]<-sum(f(0:N,i)) } plot(T,x,type="l",ylim=c(-1.5,1.5),ylab=("")) #αx(βt)の計算 for(i in 1:length(T)){f<-function(x,i){(alpha^(x+1))*cos((beta^(x+1))*i*s)} ax[i]<-sum(f(0:N,i)) } par(new=TRUE) plot(T,ax,type="l",col=2,ylim=c(-1.5,1.5),ylab=("")) par(new=TRUE) #2関数の差 plot(T,(alpha*ax-x),type="l",col=3,ylim=c(-1.5,1.5),ylab=(""))
べき関数がを満たすときの条件は
なので
と表される。
グラフとしてのフラクタル次元Dは
と表される。
はハースト数とよばれる。
1.1 複雑な形
複雑系と呼ばれる事象は数学的にどのように認識されるのかについての本。
複雑系の数理
長さ尺度を例に。
単位尺度rを用いて、求められる長さをL(r)とする。
このとき、L(r)はrについて減少関数。
マンデルブロは海岸線について
が成立することを発見した。
現象がべき関数であらわせるとき、べき則に従うといい、成り立つrの領域をスケーリング領域という。
上式のDをフラクタル次元という。
とおくと、N(r)は尺度で測った回数となる。
今、rをとしてみると
となる。c=1のときは直線などの滑らかな直線のとき成り立つ。
上式は関数方程式なので、べき関数が解となる。
すると、
と表せる。
c>1(D>1)のとき、フラクタル図形という。
1
4章 Evolutionary games
4.2 Nash equilibrium
2種類の生き物(もしくは戦略)A,Bがいて、AがそれぞれA,Bと出会った時の利得をa,bとし、Bの場合c,dとする。
これを↓のようなpayoff行列で表すとする。
このとき、
1.Aが狭義のNash均衡⇔a>c
2.AがNash均衡⇔a≧c
3.Bが狭義のNash均衡⇔d>b
4.BがNash均衡⇔d≧b
4.3 Evolutionary stable strategy(ESS)
Aが多数いる中で変異種Bがはびこらないような条件
AがESS⇔a>c or (a=c and b>d)
4.4 More than 2 strategies
strategyに対するstrategyのpayoffをとする。
1.strategyが狭義のNash均衡⇔
2.strategyがNash均衡⇔
3.strategyがESS⇔もしくは
4.strategyが広義のESS⇔もしくは
条件の強さとして1>3>4>2
無敵なstrategyはで定義される
4.5 Replicator dynamics
戦略i(もしくは変異種)に対する戦略jのpayoffをとするとn×nのpayoff行列Aができる。
また、fitnessをとすれば
再生産の方程式はとして表せる。
4.6 Hawk or Dove?
タカ派とハト派をモチーフにしたゲーム。
自分と敵のタカ派、ハト派をとる確率をとすると
期待所得はで表される。
安定点はのとき。
4.7 Thre is always a Nash equilibrium
自分も相手もn通りの戦略をとれるとし、それぞれの戦略をとる自分の分布を、相手の分布をとする。
payoff matrixを とすれば、期待所得と表せる。
このとき、なるが必ず存在する。
ペロン―フロベニウスの定理使えば証明できそう(たぶん)。
4.9 Game theory and ecology
ロトカ・ヴォルテラの式について
a<-1 b<-1 c<-1 d<-1 f<-function(x,y){ x<-x+x*(a-b*y) y<-y+y*(-c+d*x) return(c(x,y)) } n<-50 LV<-matrix(0,2,n+1) LV[,1]<-c(1.2,1.2) for(i in 1:n){ LV[,i+1]<-f(LV[1,i],LV[2,i]) } matplot(t(LV),type="l")
3章 Fitness landscape and Sequence spaces
3.1 sequence space
長さLのsequenceがあったときに、有り得るsequenceは通り。(A,T,C,G)
このL次元空間をsequence spaceとする。
これを2進数(0,1)で考えると、L次元の超立方体の格子点があり得る組み合わせとなる。
各格子点の距離はマンハッタン距離で考えられる。
3.2 Fitness landscape
Fitness landscapeはsequence space状の格子点に対し、数値(reproduction rate)を与えたもの。
各格子点の評価みたいなもの。
3.3 the equasispecies equation
2進数でのsequence spaceを考え、それぞれの格子点を10進数に変換すると0からまで1対1で配列番号として与える。
i番目の配列に対して、をそれぞれiの割合、適応度、配列jからiへの変異行列とすると、
ただし、
をequasispecies equationという。
Qが単位行列、つまり変異が起きないなら最も高い をもつ配列iが生き残る。
Qが単位行列でないなら、単体内のある点 に収束する。このときφは必ずしも最大値とはならない。
しかし、総個体数はφの指数関数で増加する。
#試行回数 t<-30 #変異しうる配列数 n<-10 #遺伝子iを持つ個体の割合ベクトル x<-runif(n) x<-x/sum(x) #遺伝子iを持つ個体のfittnessベクトル f<-runif(n) #mutation matrix Q<-matrix(runif(n*n),n,n) q<-apply(Q,1,sum) Q<-Q/q #average fittness phi<-x%*%f a<-matrix(0,n,t+1) a[,1]<-x for(i in 1:t){ dx<-(x*f)%*%Q-phi%*%x x<-x+dx a[,i+1]<-x phi<-x%*%f } matplot(t(a),type="l")
3.4 a mutation matrix for point mutations
配列i,jのハミング距離をとして、点変異の入る確率をuとすると
変異行列Qの各成分(iからjと変異する確率)は
3.5 a adaptation is localization in sequence space
変異する確率が高すぎると適応していた個体(fittnessの値が高い)の割合がいまいち増えない。
上の方は変異確率を1/100にしたもので、下の方は1/10にしたもので、上だともっとも高いfittnessをもつものに収束する。
単純なモデルでこの変異の閾値を計算すると という条件が求められる。
つまりで、RNAウイルス、大腸菌、酵母菌、マウス、人などでuLの実測値が1より低いという論文が出ているらしい(Drake(1991,1998))。
一方で、QβウイルスとVZVウイルスは1よりはるかに大きく、その理由は不明。
3.6 selection of the quasispecies
2峰性のfittness landscapeをもち、1つは高いが狭く、1つは高くはないが幅広とする。
このとき、変異の割合によって生き残りが変わってくる。
変異の割合が高すぎればすべての種が生き残り、低すぎると最も高いものに収束する。
その中間であれば、2つのピークをもつ種が生き残る。
#試行回数 t<-100 #変異しうる配列数 n<-30 #遺伝子iを持つ個体の割合ベクトル x<-runif(n) x<-x/sum(x) #遺伝子iを持つ個体のfittnessベクトル f<-c(1,rep(0,n-1))+c(rep(0,n-5),0.1,0.2,0.3,0.2,0.1) #mutationの割合を調整するパラメーター h<-100 #mutation matrix Q<-matrix(1,n,n)+h*diag(n) q<-apply(Q,1,sum) Q<-Q/q #average fittness phi<-x%*%f a<-matrix(0,n,t+1) a[,1]<-x for(i in 1:t){ dx<-(x*f)%*%Q-phi%*%x x<-x+dx a[,i+1]<-x phi<-x%*%f } plot(a[,t+1])
2章 what evolution is
evolutionary dynamicsの基本概念replication,selection,mutationについて。
replication:自己の(遺伝情報も含めて)複製。
selection:異なる個体間での淘汰。
mutation:異なる(遺伝情報をもつ)個体の生産。
1.reproduction
期間毎にそのときの個体数x(t)とある正の定数rの積で増殖するとき、
と表され、解は
となる。
これと同時に、ある正の定数dで死亡するとき、
と表され、寿命の平均はとなり、個体の増加率はrとなる。
のときに、個体数は増加していく。
最大値Kの制限付き増加モデルは、上式に制限項をかけたもので
と表され、解は
と表される。
この解はKに収束する。
今、K=1として差分方程式を考える。
負の値を取らない条件は。
収束値はaの値によって変わる。
のとき、。
[tex:1
f<-function(a,x){y<-a*x*(1-x) return(y)} t<-50 a<-1:40*0.1 x<-0.5 X<-matrix(0,t,length(a)) X[1,]<-x for(i in 2:t){ X[i,]<-f(a,X[i-1,]) } matplot(X[,1:10],type='l') matplot(X[,11:30],type='l') matplot(X[,31:40],type='l')
このモデルはさらに決定論的カオスで初期値鋭敏性をもつ。
f<-function(a,x){y<-a*x*(1-x) return(y)} t<-50 a<-4 x<-c(0.3156,0.3157) X<-matrix(0,t,length(x)) X[1,]<-x for(i in 2:t){ X[i,]<-f(a,X[i-1,]) } matplot(X[,1:2],type='l')
2.selection
2種類の生物の個体数x(t),y(t)がそれぞれa,bの割合で初期値増殖するモデル
,
について
とすることで、a,bの大きさで淘汰される側がわかる。
総個体数一定の条件x+y=1の下では
が得られ、均衡は。
また、a,bの大きさによって収束先が変わる。
これが適者生存の概念である。
多次元に応用すれば
かつとして
とすると、
単体上で考えられる。
fが最も大きい個体に収束する。
a<-matrix(0,500,3) a[1,1]<-runif(1)/2 a[1,2]<-runif(1)/2 a[1,3]<-1-a[1,1]-a[1,2] f1<-1/2 f2<-1/3 f3<-1/6 S<-function(x,y,z){sigma<-sum(x*f1+y*f2+z*f3) return(c(x+x*(f1-sigma),y+y*(f2-sigma),z+z*(f3-sigma)))} for(i in 1:499){a[i+1,]<-S(a[i,1],a[i,2],a[i,3])} library(rgl) plot3d(a,type="l",col="2")
この3次元verでは初期状態(1/2,1/3,1/6)から(1,0,0)に収束する軌道になる。(f1が最も大きいので)
3.mutation
2タイプの個体X,Yの個体数x,yについてmutationを起こしてもう一方の個体を生む割合をそれぞれとすると
としてx,yの時間変化は表される。
とすると、であり、
このときxの均衡値となる。
3つ以上のタイプの場合、mutation matrix,Q=]を用いて
と表される。
Qはn*nの推移確率行列となる。
4.mating
閉鎖的な環境下、変異も起きない中でramdom matingが行われればallele頻度は保存される(Hardy-Weinbergの法則)