这是一个将分布与 3 个参数匹配的优化问题:2 个分位数和众数。
事实上,即使您之前使用的函数也会从优化中返回估计值。如果您从那些计算分位数值α,β它给你的参数,你会发现它们不完全匹配:
> qbeta(p=c(0.025, 0.975), shape1=2.44, shape2=38.21)
[1] 0.01004775 0.14983899
我们将定义一个目标函数,用于计算已知和优化的分位数值与模式之间的平方误差,对于给定的参数集α,β分布的(编码在params向量中):
objective.function <- function(params) {
alpha <- params[1]
beta <- params[2]
intended.quantiles <- c(0.01, 0.15)
calculated.quantiles <- qbeta(p=c(0.025, 0.975), shape1=alpha, shape2=beta)
squared.error.quantiles <- sum((intended.quantiles - calculated.quantiles)^2)
intended.mode <- 0.05
calculated.mode <- calculate.mode(alpha, beta)
squared.error.mode <- (intended.mode - calculated.mode)^2
return(squared.error.quantiles + squared.error.mode)
}
calculate.mode <- function(alpha, beta) {
return((alpha-1) / (alpha+beta-2))
}
你已经有了一些好的起始值α,β,所以让我们准备好这些:
starting.params <- c(2.44, 38.21)
顺便说一句,这就是使用这些初始估计参数化的 Beta 分布的 PDF 的样子。红线是实际的分位数和模式,蓝线是您要匹配的。正如您所建议的,分位数看起来不错,但模式已关闭:

现在我们使用nlm优化函数来估计最优值α∗,β∗,从那些初始值开始。算法收敛:
nlm.result <- nlm(f = objective.function, p = starting.params)
optimal.alpha <- nlm.result$estimate[1]
optimal.beta <- nlm.result$estimate[2]
所以优化后的估计是:
α∗=3.174725
β∗=44.94454
而这些最优参数对应的分位数和众数分别为:
> qbeta(p=c(0.025, 0.975), shape1=optimal.alpha, shape2=optimal.beta)
[1] 0.01499578 0.15042877
> calculate.mode(optimal.alpha, optimal.beta)
[1] 0.04715437
重新创建 Beta PDF 的绘图,这次使用新参数,我们可以看到模式匹配得更好,但代价是更低的2.5%分位数:

可能的增强功能:
- 这是一种快速实现,可能无法很好地处理极端值和数值问题。仅在 2 个分位数的情况下查看此答案以获得更好的代码。
- 研究受约束的优化包,其中问题将被表述为估计 2 个参数 (α,β) 受约束α−1α+β−2=0.05