错误概率函数

时间:2013-11-07 08:33:05

标签: r statistics probability probability-density

我在PCR扩增过程中会出现具有碱基错配的DNA扩增子。我感兴趣的是,假定每个碱基的错误率,错配数和扩增子中碱基的数量,序列包含错误的概率是多少。

我遇到了一篇文章 [Cummings,S. M. et al(2010)。群体遗传分析中PCR,克隆和测序错误的解决方案。保护遗传学,11(3),1095-1097。 DOI:10.1007 / s10592-009-9864-6] 提出这个公式来计算这种情况下的概率质量函数。

enter image description here

我用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

在我的实施中,我可能做错了什么?我误解了什么吗?

由于

1 个答案:

答案 0 :(得分:2)

我认为他们得到了正确的数字(0.00113),但在他们的论文中得到了很好的解释。

您想要进行的计算是:

pbinom(3, 800, 1-(1-1.85e-5)^30, lower=FALSE)

即。什么是在800个独立基地中看到少于三次修改的概率,给出30个扩增,每个具有1.85e-5的出错机会。即你计算它没有保持正确30次的概率。

有些庄严,可能值得一举......

考虑到这一点,在这里处理非常小的概率时,您将开始看到浮点不准确。即1-xx的绝对值小于1e-10时,x是一个小数字将开始出错。log1p在这一点上使用对数概率是一个好主意,特别是pbinom(3, 800, 1-exp(log1p(-1.85e-5)*30), lower=FALSE) 函数是一个很好的帮助。使用:

{{1}}
即使错误合并率非常低,

仍将继续有效。