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

  • 優性・劣性・その間
  • ここで、常染色体ローカスは2つのアレルからなること、したがって、3ジェノタイプがあることから、3ジェノタイプに群分けして考えることとする
    • これまで(確率的に考える)は、ある条件が一つあって、その条件を満足するときの発病時期に関して考えてきた
    • これは、優性形式か劣性形式のいずれかであって、発病するジェノタイプと発病しないジェノタイプに2分できること、優性の場合、発病するジェノタイプは、2タイプがあるが、その2ジェノタイプの発病パターンに差がないことに相当する
  • 3群で考える。3群の違いは、次の2つ
    • フェノタイプ成立に要する蓄積回数:ThresNum
      • 「なんらかの理由」により、ジェノタイプ別に必要イベント回数が異なるような場合に相当する
      • たとえば、複数の機能単位からなるシステムがあり、機能単位の破壊が進むような場合。破壊される機能単位の数が少ないうちは、残存する機能単位が代償的に働くが、ある閾値を超えるような場合を考える。この出生時の機能単位数の多寡に影響するような遺伝因子の場合がこれに相当するだろう
    • 単位時間当たりのイベント発生回数:1/F
      • たとえば、機能性分子があって、その機能にジェノタイプごとに大小がある場合が考えられるだろう
  • フェノタイプ成立に要する蓄積回数:ThresNum

  • 単位時間当たりのイベント発生回数:1/F

  • ここでは、すべてのジェノタイプでは、そこそこの時間をかければ、全員が発病するようにシミュレーションをしている。実際には、「そもそも発病するためのきっかけ(それが環境要因と呼ばれるものかもしれない)が降りかかる確率がpである」とすれば、ここで示しているヒストグラムは、その高さをp倍してやったものとみなすことも可能である。そうすれば、ジェノタイプ間の比率については現在の表示図をそのまま用いることができる
  • 男女別の発病好発年齢分布差のある疾患などのモデルとしてもよさそうな印象がなくはない
  • このモデルで考えるのならば、ケースだけで「発病年齢解析」というのもありだろう
# 3ジェノタイプを比較する

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

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

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

ThresNums<-c(10)

DxTimesGen<-matrix(0,length(Fs),Niter)

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

	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
	}
	DxTimesGen[fi,]<-DxTimes[,1]
	#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)



}
par(mfcol=c(2,2))

	h<-hist(DxTimesGen,breaks=0:ceiling(max(DxTimesGen)),xlim=c(0,TL),ylim=c(0,0.08/3),
	xlab="Age of Dx(year)",ylab="Fraction of Dx",main="All",col=3,freq=FALSE)

for(i in 1:length(Fs)){
	tt<-paste("genotype ",i)
		hist(DxTimesGen[i,],breaks=0:ceiling(max(DxTimesGen)),xlim=c(0,TL),ylim=c(0,0.08),	xlab="Age of Dx(year)",ylab="Fraction of Dx",main=tt,col=2,freq=FALSE)

}
par(mfcol=c(1,1))

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

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

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

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

ThresNums<-c(6,8,10)

DxTimesGen<-matrix(0,length(ThresNums),Niter)

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

	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
	}
	DxTimesGen[ti,]<-DxTimes[,1]
	#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)



}
par(mfcol=c(2,2))

	h<-hist(DxTimesGen,breaks=0:ceiling(max(DxTimesGen)),xlim=c(0,TL),ylim=c(0,0.05/3),
	xlab="Age of Dx(year)",ylab="Fraction of Dx",main="All",col=3,freq=FALSE)

for(i in 1:length(ThresNums)){
	tt<-paste("genotype ",i)
		hist(DxTimesGen[i,],breaks=0:ceiling(max(DxTimesGen)),xlim=c(0,TL),	ylim=c(0,0.05),xlab="Age of Dx(year)",ylab="Fraction of Dx",main=tt,col=2,freq=FALSE)

}
par(mfcol=c(1,1))