使用fitdistrplus包拟合Pareto分布时遇start参数错误求助
问题原因与解决办法
核心问题分析
你遇到的错误源于调用fitdist时的三处参数误用:
memp参数传入方式错误:fitdist要求memp直接传入函数对象,而非函数名的字符串;- 多余的
start参数:矩估计(method="mme")拟合Pareto分布时,2个参数可通过1、2阶矩直接求解,不需要初始值,额外传入start会触发参数校验错误; - 多余的
lower/upper参数:这两个参数是给极大似然估计(mle)的优化算法用的,矩估计不需要,传入后会干扰函数逻辑。
修正后的代码
library(fitdistrplus) library(actuar) # 生成Pareto分布样本 x4 <- rpareto(1000, 6, 2) # 定义经验矩计算函数 memp <- function(x, order) mean(x^order) # 修正参数调用:移除start、lower/upper,正确传入memp函数 fP <- fitdist(x4, "pareto", method="mme", order=c(1, 2), memp=memp) # 查看拟合结果 summary(fP) # 绘制拟合诊断图 plot(fP)
补充说明
你拟合lnorm或weibull时无异常,是因为这些分布的矩估计可能需要初始值(start)辅助求解,参数校验逻辑不会触发错误;而Pareto分布的矩估计有显式解析解,不需要初始值,额外传入start会被判定为无效参数。
内容的提问来源于stack exchange,提问作者pintomat
相关产品推荐
相关产品推荐

