一致確率

  • マーカー数Nm
  • 第iマーカーのアレル数Na_i
  • 各マーカーのアレル頻度F_i=\{f_{i}(1),...,f_{i}(Na_i)\}
  • 各マーカーのディプロタイプ数Nd_i=\frac{Na_i(Na_i+1)}{2}
  • 各マーカーのディプロタイプ頻度D_i=\{d_{i}(1),...,d_{i}(Nd_i)\}
    • HWEを仮定すれば、D_iF_iから導ける
  • あるマーカーでディプロタイプが一致する確率は、P_i=\sum_{t=1}^{Nd_i} d_i(t)^2
  • すべてのマーカーでディプロタイプが一致する確率は\prod_{i}^{Nm} P_i=exp(\sum_i^{Nm} \log(P_i))
# allele freq ベクトルからdiplotype freqベクトルを作る
diplotypeFreq<-function(fa){
	m<-outer(fa,fa,"*")
	m2<-2*m
	diag(m2)<-diag(m2)/2
	m2[!lower.tri(m2)]
}
# diplotype freqベクトルから、全マーカー一致確率の自然対数値を計算する
ProbIdenticalLN<-function(ds){
	tmp<-0
	for(i in 1:length(ds)){
		p<-sum(ds[[i]]^2)
		if(p==0){
			return(-Inf)
		}else{
			tmp<-tmp+log(p)
		}
	}
	return(tmp)
}

# HWE下
# アレル頻度given
# diplotype 一致確率
# diplotype freqを作ろう
Nm<-15
library(MCMCpack)
Nas<-sample(2:10,Nm,replace=TRUE)
fs<-list()
ds<-list()
for(i in 1:Nm){
	fs[[i]]<-c(rdirichlet(1,rep(1,Nas[i])))
	print(diplotypeFreq(fs[[i]]))
	ds[[i]]<-diplotypeFreq(fs[[i]])
}
# 一致確率を計算しよう
ProbIdenticalLN(ds)