■
#バリアントの数が60のときの、CNを変える Date<-"09261" source("MST.R") Np<-100 #MST何回か HN<-50000 df<-200 cnnu<-c(20,30,40,50,60,70) Rnu<-length(cnnu) syu<-matrix(0,Np,Rnu) #boxplot用 colnames(syu)<-cnnu for (nnp in 1:Rnu){ CN<-cnnu[nnp] RN<-60 ka<-40 #アレル頻度 af<-afb<-0 for (i in 1:df){ afd<-(i-1)/df if (afd==0) afd<-0.001 afb<-c(afb,rep(afd,round(RN*(pexp(i/df,ka)-pexp((i-1)/df,ka))))) } af<-afb[-1] RN<-length(af) risk<-rep(0,RN) kr<-40 risk<-exp(-kr*af)*sign(rnorm(RN, mean=0, sd=1)) caf<-crisk<-rep(0,CN) caf<-runif(CN,0.2,0.5) af<-c(af,caf) risk<-c(risk,crisk) N<-length(af) ir<-al<-matrix(0,HN,N) #各ローカスにおけるリスク、持っているアレル wei<-wei2<-P<-sr<-rep(0,HN) #重み、フェノタイプ、リスクの総和 iaf<-rep(0,N) #真のアレル頻度 eeee<-as.character(CN) ssss<-paste(Date,"CN",eeee,".png") png(ssss) #デバイスドライバの用意 hist(af) dev.off() #個人のアレルの有無振り分け iさんについて for(i in 1:HN){ a1<-a2<-tmp1<-tmp2<-rep(0,N) a1<-runif(N) #RVの有無を決定 a2<-runif(N) tmp1[which(a1<af)]<-1 tmp2[which(a2<af)]<-1 al[i,]<-tmp1+tmp2 #アレルをいくつもつか sr[i]<-sum(risk*al[i,]) #リスク総和 } #for (i in 1:N) iaf[i]<-mean(al[,i])/2 #アレル頻度確かめ #plot(af,iaf) #グラフを描画 #eeee<-as.character(df) ssss<-paste(Date,"risk CN",eeee,".png") png(ssss) #デバイスドライバの用意 plot(density(sr)) dev.off() #sdfrac<-0.98 #遺伝率 #P<-sr*sdfrac+rnorm(N,sd=sqrt(var(sr))*(1-sdfrac)) P<-sr #plot(sr,P) #----------------MST・量的形質---------------- #par(ask=FALSE) Ncaco<-200 for (counte in 1:Np){ Cmst<-sample(1:HN,Ncaco,replace=FALSE) X<-cbind(P[c(Cmst)],al[c(Cmst),]) MST<-StatsMST(X,perm=TRUE,Nperm=100,tobeshuffled=c(1),dist.method="manhattan") plot(sort(MST$PermL),ylim=range(c(MST$L,MST$PermL))) abline(h=MST$L,col=2) title(CN*1000+counte) ll<-MST$L cat1<-seq(from=0,to=1,by=0.01) cat2<-quantile(MST$PermL,cat1) cat3<-cat2-ll syu[counte,nnp]<-length(cat3[cat3<0]) } save.image("09261vari.RData") }
このafの与え方だと、合える頻度が低いものについては発生するが、高いものについてまったく発生しないので、少し考えないといけない。
多分CVをちょっといれるのと、afの与え方をよりそれらしくするのは、RNが40個や60個ぐらいのときは同じことなので、それでいこう。20個ぐらいのときはCVを入れる意味合いが変わってくる気がする。
pexpじゃなくてdexpでいい。。。dexpの逆関数があったらいいなぁ。。。