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