R语言拟合广义帕累托分布时设置形状参数取值边界的方法
解决方法
你当前代码的约束未生效,核心原因有两点:
fitdist默认使用的Nelder-Mead优化算法不支持参数上下界约束,你配置的lower、upper参数没有实际生效- 你设置的初始值
shape2=1超出了你设定的0.5上界,会干扰优化过程
修正后的可实现约束的代码如下:
library("fitdistrplus") library("actuar") dataPar <- c(17.5, 17.8, 22.4, 22.6 ,25, 25.2, 27.5, 30, 32.4, 32.5) # 采用支持边界约束的L-BFGS-B优化算法,修正初始值在约束区间内 fit <- fitdist( data = dataPar, distr = "genpareto", method = "mle", optim.method = "L-BFGS-B", lower = c(-Inf, 0, -Inf), upper = c(Inf, 0.5, Inf), # 初始值shape2设为约束区间内的数值 start = list(shape1 = min(dataPar), shape2 = 0.2, rate = 1) ) # 查看拟合参数结果 print(fit)
运行上述代码后得到的shape2参数会被限制在(0,0.5)区间内,对应你预期的红色曲线形态。如果对拟合精度有更高要求,可调整start里的初始值,或改用method = "mge"(矩估计)配合约束使用。
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

