根据一组数据拟合出最佳分布函数, arena, Python, Matlab, R语言

不论是 matlab 还是 R 语言,根据一组数据拟合分布函数时,只能拟合出特定分布的参数值,并不能给出最适合这组数据的分布函数。例如,matlab 有 normfit 函数来计算一组数据拟合成正态分布时的均值和方差,wblfit 函数来给出拟合成威布尔分布的参数值,还有 gamfit, binofit 函数等。R 语言中也有 fitdistr函数。 

它们都不能自动给出最佳拟合分布,个人觉得可以自己编写个许多分布函数的卡方检验程序,从中选出一个拟合误差最小的分布,但估计是一个繁琐的工作。

 

发现 Python 有一个 fitter 包,可以从80个随机分布里选取一个最好的拟合分布。

参考例子:https://pypi.org/project/fitter/

 

但不管怎么样,拟合分布时数据量不能太小。(看一个资料上说,数据量一般大于20个),拟合分布的原理参看:

https://www.cbrfc.noaa.gov/present/2003/espvs.primer.pdf

 

发现另一个软件 Arena 具有这个功能,利用其中的 输入分析器可以完成这个工作。但这个 arena 不好被其他程序调用,因此总体感觉还是 python 的 fitter 包最好。

步骤:

1. 打开 Arena 的 Input Analyzer

根据一组数据拟合出最佳分布函数, arena, Python, Matlab, R语言_第1张图片

 

2. 新建一个分析器

根据一组数据拟合出最佳分布函数, arena, Python, Matlab, R语言_第2张图片

 

3. 导入数据,数据可以放在 txt 文件里,不要有除了数据外的其他符号和文字

例如一组数:由伽玛分布生成随机数 gmarnd

6.03 2.80 0.96 3.97 2.98
3.32 1.62 3.54 2.28 0.59
4.93 8.64 2.35 1.17 0.67
2.72 4.08 3.17 2.84 1.46
4.89 4.39 6.19 9.50 1.87

导入:

根据一组数据拟合出最佳分布函数, arena, Python, Matlab, R语言_第3张图片

 

4. 拟合,选择 fit all 功能

根据一组数据拟合出最佳分布函数, arena, Python, Matlab, R语言_第4张图片

 

5. 查看结果

根据一组数据拟合出最佳分布函数, arena, Python, Matlab, R语言_第5张图片

 

Arena 给出了 lognormal 分布,可见 arena 软件给出的分布函数更加精细。

你可能感兴趣的:(python,数据拟合,arena,最佳拟合分布)