アレル頻度を周期関数で
アレル頻度を空間中に関数で表現するための第1歩として、三角関数を用いてみる。
そのごく初期段階のお試し。
df<-1 # 空間の次元 Nd<-4 # サンプルセット数 Nm<-1 # マーカー数 #Means<-matrix(rep(0,Nd*df),Nd,df) # サンプルセットのサンプリングの中心 Means<-matrix(rnorm(Nd*df),Nd,df) SDs<-matrix(rep(1,Nd*df),Nd,df) # サンプルセットのサンプリングのSD # マーカーのアレル頻度は各軸について、1/2*(sin((x-t)/k) +1) で0-1の範囲をとる周期関数とする # kがサンプリングの分布の中心とSDに比べて、十分に大きいときは、1峰性の関数とみなすことができる AfCalc<-function(k,t,x){ 1/2*(sin((x-t)/k)+1) } Ks<-matrix(rep(1,Nm*df),Nm,df) Ts<-matrix(rep(0,Nm*df),Nm,df) L<-1000 Xs<-seq(from=-10,to=10,length.out=L) res<-c() probs1<-probs2<-matrix(0,Nd,Nm) for(im in 1:Nm){ for(id in 1:Nd){ DfCounter<-rep(0,df) loop<-TRUE while(loop){ DfCounter[1]<-DfCounter[1]+1 if(df>1){ for(i in 1:(df-1)){ if(DfCounter[i]==(L+1)){ DfCounter[i]<-0 DfCounter[i+1]<-DfCounter[i+1]+1 } } } af<-1 sp<-1 for(i in 1:df){ af<-af*AfCalc(k=Ks[im,i],t=Ts[im,i],x=Xs[DfCounter[i]]) sp<-sp*dnorm(x=Xs[DfCounter[i]],mean=Means[id,i],sd=SDs[id,i]) } probs1[id,im]<-probs1[id,im]+af*sp probs2[id,im]<-probs2[id,im]+(1-af)*sp res<-c(res,af*sp) if(sum(DfCounter)==L*df){ loop<-FALSE } } } } plot(res) probFinal<-probs1/(probs1+probs2) probFinal plot(Xs,AfCalc(k=Ks[1,1],t=Ts[1,1],x=Xs))