我在PCR扩增过程中会出现具有碱基错配的DNA扩增子。我感兴趣的是,假定每个碱基的错误率,错配数和扩增子中碱基的数量,序列包含错误的概率是多少。
我遇到了一篇文章 [Cummings,S. M. et al(2010)。群体遗传分析中PCR,克隆和测序错误的解决方案。保护遗传学,11(3),1095-1097。 DOI:10.1007 / s10592-009-9864-6] 提出这个公式来计算这种情况下的概率质量函数。
我用R实现了这个公式
pcr.prob <- function(k,N,eps){
v = numeric(k)
for(i in 1:k) {
v[i] = choose(N,k-i) * (eps^(k-i)) * (1 - eps)^(N-(k-i))
}
1 - sum(v)
}
从文章中,我们建议我们使用30个循环的PCR分析800 bp扩增子,每个循环每个碱基1.85e10-5
错误掺入,并发现10
个独特序列,每个3
个bp不同于他们最相似的序列。通过三个独立的PCR误差产生新序列的概率等于P = 0.0011
。
然而,当我使用公式的实现时,我会得到不同的值。
pcr.prob(3,800,0.0000185)
[1] 5.323567e-07
在我的实施中,我可能做错了什么?我误解了什么吗?
由于
答案 0 :(得分:2)
我认为他们得到了正确的数字(0.00113),但在他们的论文中得到了很好的解释。
您想要进行的计算是:
pbinom(3, 800, 1-(1-1.85e-5)^30, lower=FALSE)
即。什么是在800个独立基地中看到少于三次修改的概率,给出30个扩增,每个具有1.85e-5的出错机会。即你计算它没有保持正确30次的概率。
有些庄严,可能值得一举......
考虑到这一点,在这里处理非常小的概率时,您将开始看到浮点不准确。即1-x
当x
的绝对值小于1e-10时,x
是一个小数字将开始出错。log1p
在这一点上使用对数概率是一个好主意,特别是pbinom(3, 800, 1-exp(log1p(-1.85e-5)*30), lower=FALSE)
函数是一个很好的帮助。使用:
{{1}}即使错误合并率非常低,
仍将继续有效。