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

  • こちらの記事で死亡というフェノタイプから、「事件の蓄積」というフェノタイプを考えた
  • このフェノタイプを整理する
    • 生起確率が一定なイベントが複数回起きることで生じるフェノタイプとして定義した
    • ここで用いるパラメタは:
      • フェノタイプ成立に要する蓄積回数:ThresNum
      • 単位時間当たりのイベント発生回数:1/F
  • 出生後、間もなく、診断がつく単一遺伝子疾患
    • 座位数1、その座位のジェノタイプが以下のFを決める
    • 単位時間当たりのイベント発生回数 1/F〜イベント間隔の平均時間 F
      • Fが小さい
        • ジェノタイプが発病型の場合(ジェノタイプが非発病型の場合にはFは無限大)
    • フェノタイプ成立に要する蓄積回数がFに比べて十分に小さい
  • 代謝回路の酵素機能欠失は「代謝酵素反応を失敗する」というイベントをお越し、そのイベントは「間断なく発生」(Fがほぼ無限小である)し、それが代謝物の濃度を不適切にするという中間フェノタイプを経て、観察可能な粗大なフェノタイプを発現させる。診断にあたっては、観察フェノタイプとともに、中間フェノタイプの観察で確定する(ガスリー試験)

# 出生時まもなく、診断がつく単一遺伝子疾患
NL<-1 # 座位数
TL<-120 # 一生は120年
F<-c(0.001) # イベントが起きる平均時間間隔(年)
ThresNum<-c(1)
Niter<-1000
DxTimes<-matrix(0,Niter,NL)
for(ii in 1:Niter){
	NR<-1000
	Rmat<-matrix(0,NL,NR)
	for(i in 1:NL){
		Rmat[i,]<-rexp(NR,1/F[i])
	}
	CumEventMat<-t(apply(Rmat,1,cumsum))

	DxTime<-rep(0,NL)
	for(i in 1:NL){
		DxTime[i]<-CumEventMat[i,ThresNum[i]]
	}
	DxTimes[ii,]<-DxTime
}
hist(DxTimes[,1],breaks=0:ceiling(max(DxTimes[,1])),xlim=c(0,TL),
xlab="Age of Dx(year)",ylab="Fraction of Dx",col=2,freq=FALSE)
  • 2個のパラメタをそれぞれ振ってみる
      • フェノタイプ成立に要する蓄積回数:ThresNum
      • 単位時間当たりのイベント発生回数:1/F
  • ThresNum


    • ある年齢に達すると、確実に発病する様子を表す。病気ではなく、あるタイミングで必ず起きるべき事象はこのようなモデルに沿っている可能性があることもわかる
# だんだんに事件が蓄積して、あるとき、診断に至る単一遺伝子疾患

NL<-1 # 座位数
TL<-120 # 一生は120年
# イベントがしょっちゅう起きて(均質化して)いる場合には
# Dxのタイミングにはばらつきが小さい

F<-c(0.01) # イベントが起きる平均時間間隔(年)

ThresNums<-(1:10)*100
par(ask=TRUE)
for(ti in 1:length(ThresNums)){
	ThresNum<-ThresNums[ti]

	Niter<-1000
	DxTimes<-matrix(0,Niter,NL)
	for(ii in 1:Niter){
		NR<-ThresNum
		Rmat<-matrix(0,NL,NR)
		for(i in 1:NL){
			Rmat[i,]<-rexp(NR,1/F[i])
		}
		CumEventMat<-t(apply(Rmat,1,cumsum))

		DxTime<-rep(0,NL)
		for(i in 1:NL){
			DxTime[i]<-CumEventMat[i,ThresNum[i]]
		}
		DxTimes[ii,]<-DxTime
	}

	hist(DxTimes[,1],breaks=0:ceiling(max(DxTimes[,1])),xlim=c(0,TL),
	xlab="Age of Dx(year)",ylab="Fraction of Dx",col=2,freq=FALSE)
plot(ecdf(DxTimes[,1]),xlim=c(0,TL))
}
  • F


    • ヒトの寿命(ここでは120歳)に達しても発病率が1に達さない様子も見える。個人によって、死亡年齢はこれより若いから、それも含めて、浸透率が1ではないことがわかる。
# だんだんに事件が蓄積して、あるとき、診断に至る単一遺伝子疾患
# イベントが時々起きて(均質化していなくて)いる場合には
# Dxのタイミングにはばらつきが大きい

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

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

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

ThresNums<-10
par(ask=TRUE)
for(fi in 1:length(Fs)){
	F<-Fs[fi]
	ThresNum<-ThresNums[1]

	Niter<-1000
	DxTimes<-matrix(0,Niter,NL)
	for(ii in 1:Niter){
		NR<-ThresNum
		Rmat<-matrix(0,NL,NR)
		for(i in 1:NL){
			Rmat[i,]<-rexp(NR,1/F[i])
		}
		CumEventMat<-t(apply(Rmat,1,cumsum))

		DxTime<-rep(0,NL)
		for(i in 1:NL){
			DxTime[i]<-CumEventMat[i,ThresNum[i]]
		}
		DxTimes[ii,]<-DxTime
	}

	hist(DxTimes[,1],breaks=0:ceiling(max(DxTimes[,1])),xlim=c(0,TL),
	xlab="Age of Dx(year)",ylab="Fraction of Dx",col=2,freq=FALSE)

plot(ecdf(DxTimes[,1]),xlim=c(0,TL))
}