假设我有两点和在哪里是 beta CDF 上的概率,并且是同一个 CDF 上的值。我将如何确定 beta 分布形状参数和只有这两点?
为了澄清,我假设我已经知道分布 L 和 U 的下限和上限。
假设我有两点和在哪里是 beta CDF 上的概率,并且是同一个 CDF 上的值。我将如何确定 beta 分布形状参数和只有这两点?
为了澄清,我假设我已经知道分布 L 和 U 的下限和上限。
转型
将这些点转换为 CDF 上的点以进行 Beta分配。假设这已经完成(所以我们不需要更改符号),问题是找到和为此
其中 Beta CDF 等于
这是一个很好的功能和:在这些论点中是可区分的,并且评估成本不会太高。但是,不存在封闭形式的通解,因此必须使用数值方法。
当心:当两者处于分布的同一尾部,或者当两者接近时或者,找到一个可靠的解决方案可能会有问题。在这种情况下有用的技术是
重新参数化分布以避免强制执行“硬”约束. 一种可行的方法是使用这些参数的对数。
优化相对误差的度量。对 CDF 执行此操作的一个好方法是使用值的logits的平方差:也就是说,替换经过并且适合通过最小化平方差的和来得到这些值。
要么从对参数的非常好的估计开始,要么——如实验所示——高估它们。(在遵循准则 #2 时,这可能不太必要。)
以下示例代码说明了这些方法,其中使用nlm了R. 即使在第一种情况下,它也能产生完美的拟合,这在数值上具有挑战性,因为小而远进入同一条尾巴。输出包括覆盖拟合(红色)的真实 CDF(黑色)图。图上的点显示了两者对。
这种解决方案在更极端的情况下可能会失败:获得正确参数的近似估计有助于确保成功。

#
# Logistic transformation of the Beta CDF.
#
f.beta <- function(alpha, beta, x, lower=0, upper=1) {
p <- pbeta((x-lower)/(upper-lower), alpha, beta)
log(p/(1-p))
}
#
# Sums of squares.
#
delta <- function(fit, actual) sum((fit-actual)^2)
#
# The objective function handles the transformed parameters `theta` and
# uses `f.beta` and `delta` to fit the values and measure their discrepancies.
#
objective <- function(theta, x, prob, ...) {
ab <- exp(theta) # Parameters are the *logs* of alpha and beta
fit <- f.beta(ab[1], ab[2], x, ...)
return (delta(fit, prob))
}
#
# Solve two problems.
#
par(mfrow=c(1,2))
alpha <- 15; beta <- 22 # The true parameters
for (x in list(c(1e-3, 2e-3), c(1/3, 2/3))) {
x.p <- f.beta(alpha, beta, x) # The correct values of the p_i
start <- log(c(1e1, 1e1)) # A good guess is useful here
sol <- nlm(objective, start, x=x, prob=x.p, lower=0, upper=1,
typsize=c(1,1), fscale=1e-12, gradtol=1e-12)
parms <- exp(sol$estimate) # Estimates of alpha and beta
#
# Display the actual and estimated values.
#
print(rbind(Actual=c(alpha=alpha, beta=beta), Fit=parms))
#
# Plot the true and estimated CDFs.
#
curve(pbeta(x, alpha, beta), 0, 1, n=1001, lwd=2)
curve(pbeta(x, parms[1], parms[2]), n=1001, add=TRUE, col="Red")
points(x, pbeta(x, alpha, beta))
}