为了从 beta 发行版中采样,我编写了该代码:
{
stopifnot(n > 0 & all(beta > 0) & all(alpha > 0))
x <- runif(n)
Fa <- pbeta(a, alpha, beta)
Fb <- pbeta(b, alpha, beta)
y <- (1-x)*Fa + x*Fb
return(qbeta(y, alpha, beta))
}
该代码几乎适用于aand的所有值b。事实是,当a和b太接近 0 或 1 时,代码不再起作用。例如,对于a=0.00015and b=0.00020,R 给出的Faand的值为Fb1。由于这两个值相同,因此代码不再起作用。但是这些值应该是不同的,因为pbeta(a, alpha, beta, log=TRUE)是不同的 pbeta(b, alpha, beta, log=TRUE)。
我的问题是,有没有办法找到Faand的真正价值Fb?