R中有大量多项式

时间:2015-03-23 19:05:25

标签: r

下面我提供了一个示例代码,它在运行时挂起。我需要快速计算这个数字,并没有找到合适的解决方案。感谢

library(multicool)

A <- 0.68
B <- 0.27
C <- 0.047
D <- 0.003

nA <- 680
nB <- 270
nC <- 47
nD <- 3

x <- c(nA,nB,nC,nD)
k <- multinom(x, counts = TRUE)

prob <- (A ^ nA)*(B ^ nB)*(C ^ nC)*(D ^ nD)*(k)

1 个答案:

答案 0 :(得分:1)

所以,即使使用这个额外的库,这也不是R的问题类型。根据{{​​3}},k等于大约1.008 * 10 ^ 935。我建议采用日志和近似值。

那么,你在做什么,为什么你认为你需要这个价值?

如果你想近似,这对于日志来说是微不足道的:

# k = (sum(x))! / x[1]! / x[2]! / x[3]! / x[4]!

log(n!) = sum(log(1:n)),所以这应该是一个很好的对数近似值:

log.k = sum(log(1:sum(x))) - sum(log(1:x[1])) - sum(log(1:x[2])) - 
    sum(log(1:x[3])) - sum(log(1:x[4]))

我们可以定义

p = c(A, B, C, D)

然后

log.prob = sum(x * log(p)) + log.k

> log.prob
# [1] -7.867374

(我发现了我的错误,错过了阶乘中所需的1:几个。)

或者,我们可以使用内置的dmultinom

dmultinom(x = x, size = 1000, prob = p, log = T)
# [1] -7.867374