使用Distributions.jl的fit_mle拟合威布尔分布遇DomainError报错求助
解决Distributions.jl拟合威布尔分布的DomainError问题
问题原因
报错Weibull: the condition α > zero(α) is not satisfied本质是威布尔分布的形状参数α必须严格大于0,拟合过程中出现违反该条件的情况,最常见的诱因是:
- 输入数据中包含非正值(0或负数),威布尔分布的支撑集仅为正实数,非正值会导致MLE拟合时出现数值异常。
解决步骤
检查数据中的非正值
先验证数据是否存在不符合要求的元素:any(x -> x ≤ 0, nice[:,1]) # 返回true则说明存在非正值 # 也可以查看具体的非正值位置 findall(x -> x ≤ 0, nice[:,1])过滤或修正数据
移除所有非正值(推荐,符合威布尔分布的定义):filtered_data = filter(x -> x > 0, nice[:,1])如果0是测量精度导致的极小值,也可以用极小正数替代:
corrected_data = map(x -> x ≤ 0 ? 1e-8 : x, nice[:,1])重新执行拟合
使用处理后的数据集重新拟合:fit_mle(Weibull, filtered_data)
额外说明
威布尔分布常用于描述失效时间、寿命数据等场景,这类数据天然应为正实数。如果数据中存在大量非正值,建议先确认数据采集或预处理环节是否存在错误。
内容的提问来源于stack exchange,提问作者Ethan Leonard
相关产品推荐
相关产品推荐

