フェノタイプの整理メモ10 確率的に考える5

  • 数えられるフェノタイプ、可逆・非可逆
    • 疾患に特有な病変部を数えることができることがある
    • 上記の2つの例は「非可逆病変」と「可逆病変(破壊は非可逆・炎症の有無は可逆)」で異なる
    • 「非可逆病変」の場合には、0/1型フェノタイプで考えたところの「累積イベント数」とみなすことが可能
    • 「可逆病変」の場合には、「治る」という要素を加味する必要がある
  • 個々の病変部の状態が可逆である場合について考えてみる
    • 可逆病変では、進行させるプロセスがある
    • 可逆病変では、いったん進行したプロセスを逆行させるプロセスがある
    • 逆行プロセスは、「進んでいる」状態のときにのみ発動して、「ゼロ」の状態のときには発動しない点で、順行と逆行とは非対称である
      • この「非対称的」であることは、ある形質に対して「リスク・プロテクティブ」と考えることが「対称的」であることと、異質である
      • 順行因子を抑えるのと逆行因子を補うのとでどちらがプロセスのコントロールによい効果をもたらすか、も考えどころであるだろうことが想像できる
    • 個々の病変部でイベントの累積が可逆的に起きて、結果として「病的状態」「非病的状態」の2通りを取るとする
    • そのうえで、複数の箇所が「病変」足りえるとしたときに、「病変箇所数」がどのような推移をするかをシミュレーションしてみよう

# 数えられるフェノタイプ

# 3ジェノタイプを比較する

NL<-1 # 座位数
TL<-120 # 一生は120年

# イベントがしょっちゅう起きて(均質化して)いる場合には
# Dxのタイミングにはばらつきが小さい

Fs<-0.01*2^(10) # イベントが起きる平均時間間隔(年)

Gs<-Fs # イベントを修復する平均時間間隔(年)
ThresNums<-c(50)

Nlegion<-10 # 関節数とか

Niter<-1 # 人数

for(fi in 1:length(Fs)){
	F<-Fs[fi]
	G<-Gs[fi]
	for(ti in 1:length(ThresNums)){
		ThresNum<-ThresNums[ti]
		for(ii in 1:Niter){
			NR<-ThresNum*1000
			Fevents<-matrix(rexp(Nlegion*NR,F),nrow=Nlegion)
			Gevents<-matrix(rexp(Nlegion*NR,G),nrow=Nlegion)
			FeventsCum<-t(apply(Fevents,1,cumsum))
			GeventsCum<-t(apply(Gevents,1,cumsum))
			
			FGtime<-cbind(FeventsCum,GeventsCum)
			FG11<-cbind(matrix(1,nrow=Nlegion,ncol=NR),matrix(-1,nrow=Nlegion,ncol=NR))
			zerotimesList<-c()
			zerotimes01List<-c()
			for(i in 1:Nlegion){
				ord<-order(FGtime[i,])
				tmp11<-FG11[i,ord]
				tmpcumsum<-cumsum(tmp11)
				truecumsum<-tmpcumsum
				
				negs<-which(tmpcumsum<0)
				if(length(negs)>0){
					negval<-tmpcumsum[negs]
					maxNeg<-min(negval)
					inits<-rep(0,abs(maxNeg))
					for(j in 1:length(inits)){
						inits[j]<-which(negval==-j)[1]
					}
					cancelled<-FG11[i,ord]
					cancelled[negs[inits]]<-0
					
					truecumsum<-cumsum(cancelled)
				}
				truecumsum01<-truecumsum-ThresNum
				zeros<-which(truecumsum01==0)
				if(length(zeros)>0){
					zerotimes<-FGtime[i,ord[zeros]]
					zerotimes01<-(-1)^(0:(length(zerotimes)-1))
					zerotimesList<-c(zerotimesList,zerotimes)
					zerotimes01List<-c(zerotimes01List,zerotimes01)
				}
				
				
#matplot(cbind(tmpcumsum,truecumsum),type="l")
			}
			ord2<-order(zerotimesList)
			#if(min(cumsum(zerotimes01List[ord2]))<0){
			plot(zerotimesList[ord2],cumsum(zerotimes01List[ord2]),type="s",xlim=c(0,TL))

			#}
		}
	
	}

}