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