核家族ごと・ディプロタイプを固定して、確率・尤度を計算

  • 核家族のディプロタイプが与えられたとき、その尤度は、両親のディプロタイプから、子のディプロタイプが生まれる確率を計算する
  • 子が複数のときは、子ごとに確率を計算して、それを掛け合わせる
  • 核家族のメンバーが取りうるディプロタイプがわかっているときは、メンバーが取りうるディプロタイプのすべてを組み合わせて、その組み合わせごとに確率を計算することもできる
  • この段階では、メンバーがそれぞれのディプロタイプをとる確率については棚上げしておく
CalcProbNucs<-function(p,g,A,P,nucs,LDZout){
	rets<-list()
	for(nn in 1:length(nucs)){
		nuc<-nucs[[nn]]
		dimvector<-nuc[2:length(nuc)]
		fa<-nuc[2]
		mo<-nuc[3]
		offs<-nuc[4:length(nuc)]
		pivot<-nuc[1]
		if(pivot!=0){
			who<-which(nuc[2:length(nuc)]==pivot)
			dimvector<-nuc[2:length(nuc)]
			pivotLoc<-which(dimvector==pivot)
			dimvector<-c(dimvector[-pivotLoc],pivot)
		}
		#print(dimvector)
		genotypeNumVector<-rep(0,length(dimvector))
		for(i in 1:length(dimvector)){
			#genotypeNumVector[i]<-length(LDZout$dset[[dimvector[i]]])
			#genotypeNumVector[i]<-length(LDZout$dtypeset[[dimvector[i]]])
			genotypeNumVector[i]<-length(LDZout$dlist[[dimvector[i]]])
		}
		genotypeNumVector
		ret<-array(1,genotypeNumVector)
		faid<-which(dimvector==fa)
		moid<-which(dimvector==mo)
		ofid<-which(dimvector!=fa & dimvector!=mo)

		counter<-array(1:prod(genotypeNumVector),genotypeNumVector)
		for(i in 1:length(ret)){
			x<-which(counter==i,arr.ind=TRUE)
			#print("----")
			tmpprob<-1
			faset<-LDZout$dlist[[dimvector[faid]]][[x[faid]]]
			moset<-LDZout$dlist[[dimvector[moid]]][[x[moid]]]
			for(j in ofid){
				ofset<-LDZout$dlist[[dimvector[j]]][[x[j]]]
				#print(faset)
				#print(moset)
				#print(ofset)
				tmptmpprob<-LikeTrio(faset,moset,ofset)
				#print(tmptmpprob)
				#print(tmpprob)
				tmpprob<-tmpprob*tmptmpprob
				#print(tmpprob)
				
			}
			ret[x]<-tmpprob
		}
		#print("====")
		#print(ret)
		rets[[nn]]<-list(ret,dimvector)
	}
	rets
}
	

	
LikeTrio<-function(setf,setm,seto){
	couple<-setf*setm
	cnt<-0
	for(i in couple){
		if(as.set(i) == seto)cnt<-cnt+1
	}
	cnt/length(couple)
}
cpnout<-CalcProbNucs(p,g,A,P,nucs,LDZout)