gamma 分布是一种连续概率分布,适用于描述正数域且呈右偏形态的随机变量,常见于保险索赔、降水量分析、生存分析等领域。作者这里介绍已知区间频数的情况下,如何使用最小二乘法实现分布拟合。
写在前面:关于 MATLAB 内置函数的使用方法,感兴趣的同学可以通过选中函数,鼠标右击的方式打开关于函数的帮助,里面 MATLAB 官方已经详细给出使用这一函数的语法、说明及使用示例。详见下图。
一、gamma 分布的理论基础
概率密度函数(PDF):
f
(
x
)
=
1
b
a
Γ
(
a
)
x
a
−
1
e
−
x
b
f(x) = \frac{1}{b^{a} \Gamma(a)} x^{a-1} e^{-\frac{x}{b}}
f(x)=baΓ(a)1xa−1e−bx
累积分布函数(CDF):
F
(
x
)
=
1
b
a
Γ
(
a
)
∫
0
x
t
a
−
1
e
−
t
b
d
t
F(x) = \frac{1}{b^{a} \Gamma(a)} \int_{0}^{x} t^{a-1} e^{-\frac{t}{b}} dt
F(x)=baΓ(a)1∫0xta−1e−btdt
其中,
a
>
0
a>0
a>0为形状参数,决定分布的形状;
b
>
0
b>0
b>0为尺度参数,决定分布的范围;
Γ
(
⋅
)
\Gamma(·)
Γ(⋅)为gamma
函数,定义为:
Γ
(
s
)
=
∫
0
+
∞
t
s
−
1
e
−
t
d
t
,
R
e
(
s
)
>
0
\Gamma(s) = \int_{0}^{+\infty} t^{s-1} e^{-t} dt,Re(s)>0
Γ(s)=∫0+∞ts−1e−tdt,Re(s)>0
二、数据准备
此部分主要是读取原始数据。
%% 1、mat文件
load data.mat % 加载所有变量
%% 2、Excel文件
data = readmatrix('gamma分布.xlsx');
%% 3、csv文件
data = readmatrix('gamma分布.csv');
%% 4、txt文件
data = readmatrix('gamma分布.txt');
三、Gamma 分布拟合的实现
- 优化算法:采用
fmincon
的SQP
算法进行约束优化 - 约束条件: a a a > 0, b b b > 0
拟合结果评估:
拟合完成后,计算平均绝对误差 (Mean Absolute Error, MAE) 、均方根误差(root mean square error, RMSE)和可决系数R2从定量的角度去衡量概率模型与实际分布曲线之间的不同。
为了更直观地展示拟合结果,可以使用 MATLAB 的绘图函数进行可视化,绘制数据的直方图和拟合的 gamma 分布曲线。这里以生成的随机数作为样本数据,并对数据插图进行美化处理。
效果展示:
关注公众号【科研小小怪】,后台回复关键词【分布拟合第三期】免费获取示例代码。因防止中文乱码,分享的是文本文件,如下图。
运行方法:
- 新建脚本
-
复制代码粘贴到新建脚本中,并保存
-
运行