有时在数据处理过程中需要对数据进行概率分布拟合。当具有多组数据,且不清楚这些数据是否具有相同分布特征的情况下,如何寻找最优的拟合方式?尝试提出以下解决办法。
运用到的两个核心函数为fitdist以及kstest。
首先,列出数据可能符合的概率分布函数(具体可以查看fitdist官方说明文档中的“分布名称”一栏:对数据进行概率分布对象拟合 - MATLAB fitdist - MathWorks 中国),将其分别对数据进行拟合,主要代码为pd=fidist(data,distname);
然后分别对原数据及拟合各个函数进行KS检验,选择ks统计量最小的拟合函数作为最优分布,主要代码为:[h,p,kstat,cv]=kstest(data,'CDF',pd);
示例代码如下:
flist={‘Gamma’;‘Weibull’;‘gev’;‘gp’;‘Lognormal’;‘Logistic’;‘Rayleigh’;‘Exponential’} %创建拟合函数库。博主处理的是自然地理数据,选择以上8个函数进行拟合
for i=1:length(flist)
pd{i}=fidlist(data,flist{i}); %其中data必须为单列数据
[~,~,kstat(i),~]=kstest(data,'CDF',pd{i});
end
kmin=min(kstat); %寻找最小ks统计量
bestf=pd{kstat==kmin}; %输出最小ks统计量对应的最优拟合分布