答案取决于你的问题。
以下是我的解释:
你有 5 条染色体,你对其中任何一条独立于其他染色体为零的事件感兴趣,你称之为“总概率”。您想知道单个比率的哪种组合可确保该总概率为零或可忽略不计。
关键是你所说的可以忽略不计。
如果你愿意接受它们都不为零的1%lambda=6.3的可能性,那么你的答案是,所有染色体都具有统一的比率。
> sum(dpois(x=0,lambda=rep(6.3,5))) # uniform rate for all 5 chromosomes
[1] 0.009182 # less than 1% total probability
有5%的机会,答案是lambda=4.7。
然而,单独的费率可以更小或更大,只要它们有助于将总数保持在公差范围内。例如:
> sum(dpois(x=0,lambda=c(6,6,7,8,8))) # non-uniform rates
[1] 0.00654 # also less than 1% total probability
解决方案(统一费率):
定义一个进行计算的函数。在这里,我假设所有费率都是相等的,尽管您可以直接将 lambda 设置为rate并传入任何费率向量。
all_chrom_zero <- function(rate) {
sum(dpois(x=0,lambda=rep(rate,5)))
}
然后使用sapply它在试用率列表上运行它,并选择低于您的置信度阈值的最小比率——在本例中为 1%
tol <- 0.01
wt<-seq(0,10,0.1) # candidate rates
min(wt[which(sapply(wt,all_chrom_zero)<0.01)])
[1] 6.3
上面的代码已经被构造成一个没有太多困难的矩阵(使用sapply)。因此,您可以完全取消统一假设,并实际运行您的代码来模拟各种 5 元组的速率。
如果您的生物模型有关于单个染色体比率分布的信息,这将是一个加分项。如果没有,您可以从高斯分布中为每个染色体的速率抽取随机样本,每个样本都以均匀解为中心,然后对这些进行计算,或者如果您喜欢蛮力计算,您可以(只是为了好玩!)也运行在 5D 网格上进行计算,并在不同的公差水平上寻找“等概率”曲线。
Background forsapply
Usingsapply可以避免 R 中的显式循环,并且对于构建模拟非常强大。如果您需要一些背景知识,我在此处的答案中引用了一些有用的引物。