(5)如何判断数据符合哪一种分布

数据的最优分布


前言

前面我讲了大量关于Copulas的联合概率计算方案,这里面有个很重要的问题,也是Copula计算的第一步,怎么确定一组数据的最优分布和累计概率分布?

1、分布是什么?

大千世界,任何一种数据规律符合一种合适的数据分布,我们最熟悉的就是正态分布,举个例子,就像全国学生的高考成绩的分布,考的好的和考的差的分居两头(大约各10%),大多数保持中间水平(80%),这就可以解释为什么正态分布呈现倒扣的钟形。
概率分布用以表达随机变量取值的概率规律,根据随机变量所属类型的不同,概率分布取不同的表现形式,主要分为离散变量概率分布和连续变量概率分布。
离散随机变量
随机实验的所有可能结果都是随机变量。一个随机变量集合用X表示。
如果实验可能的结果是可数的,那么它被称为离散随机变量。例如,如果你抛硬币 20 次,你能得到的正面数可以用一个数字表示。或者篮子里有多少苹果仍然是可数的。
连续随机变量
这些是不能以离散方式表示的值。在一定区间内可以任意取值的变量叫连续变量,其数值是连续不断的,相邻两个数值可作无限分割,即可取无限个数值。例如,生产零件的规格尺寸,人体测量的身高、体重、胸围等为连续变量,其数值只能用测量或计量的方法取得。例如,一个人可能有 1.7 米高,1米 80 厘米,1.6666666…米高等。

离散型分布:二项分布、多项分布、伯努利分布、泊松分布。
连续型分布:均匀分布、正态分布、指数分布、伽玛分布、偏态分布、贝塔分布、威布尔分布、卡方分布、F分布。

PDF:概率密度函数(probability density function),是用来描述连续型随机变量的输出值,在某个确定的取值点附近的可能性的大小的函数。
CDF : 累积分布函数 (cumulative distribution function),又叫分布函数,是概率密度函数的积分,能完整描述一个实数随机变量x的概率分布,是概率密度函数的积分。随机变量小于或者等于某个数值的概率P(X<=x)即:F(x) = P(X<=x)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、如何判断?

2.1 最优分布判断

怎样判断两个分布是否同分布,直观来看就是画出两个分布的累积分布曲线,如果基本重合说明是同分布。
绘制直方图:直方图可以显示数据的数量分布情况。

计算概率密度函数:如果数据符合某种概率分布,可以使用概率密度函数进行拟合,以确定数据的分布。

使用Q-Q图:Q-Q图可以对比数据与理论分布的相似度。设定一系列累计概率,然后求出同一累计概率对应的分位数分别作为x和y来画散点图,如果散点基本分布在y=x这条直线上说明两个累积分布曲线基本吻合,认为两个数据是同分布的。
计算统计量:如均值,方差,偏度,峰度等,可以进一步比较数据之间的分布特征。
当然还有以下的检验方法:

卡方检验(Chi-square test)
在这里插入图片描述

K-S检验(Kolmogorov-Smirnov test)
在这里插入图片描述

A-D检验(Anderson-Darling test)

在这里插入图片描述在这里插入图片描述

2.2 累积概率分布

代码如下(示例):

%以下是示例数据,根据AIC BIC准则计算最优边缘分布
%% 计算经验的概率
EP1_emp = CalcEmpProb(U1);
EP2_emp = CalcEmpProb(U2);
EP_emp = [EP1_emp EP2_emp];

%% 拟合分布的边际和计算拟合的边际概率

% 从多种分布中拟合数据
[D_U1, PD_U1] = marginalallfitdist(data(:,1));
[D_U2, PD_U2] = marginalallfitdist(data(:,2));

% 计算拟合边际概率
EP1 = cdf(PD_U1{1},data(:,1));
EP2 = cdf(PD_U2{1},data(:,2));

% 检查逆是否也满足
IEP1 = icdf(PD_U1{1},EP1);
IEP2 = icdf(PD_U2{1},EP2);

% 如果EP是空值或无穷,则尝试下一个分布
while any( isnan(EP1) | isinf(EP1) | isnan(IEP1) | isinf(IEP1) )
    counter_D_U1 = counter_D_U1 + 1;
    EP1 = cdf(PD_U1{counter_D_U1},data(:,1));
    IEP1 = icdf(PD_U1{counter_D_U1},EP1);
end
counter_D_U2 = 1;
while any( isnan(EP2) | isinf(EP2) | isnan(IEP2) | isinf(IEP2) )
    counter_D_U2 = counter_D_U2 + 1;
    EP2 = cdf(PD_U2{counter_D_U2},data(:,2));
    IEP2 = icdf(PD_U2{counter_D_U2},EP2);
end

% EP = [EP1 EP2];
EP = EP_emp;
%0概率替换为 1e-4
EP( EP == 0 ) = 1e-4;

筛选最优边缘分布特征结果
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

以上就是今天要讲的内容,本文简单介绍了边缘分布的概念和计算方式,不足之处欢迎大家批评指正,补充交流。

参考文献

Althoff, D., Rodrigues, L.N., 2021. Goodness-of-fit criteria for hydrological models: Model calibration and performance assessment. Journal of Hydrology, 600: 126674. DOI:https://doi.org/10.1016/j.jhydrol.2021.126674
Huang, Z. et al., 2023. Reliability of Ensemble Climatological Forecasts. Water Resources Research, 59(9): e2023WR034942. DOI:https://doi.org/10.1029/2023WR034942
Xu, H. et al., 2022. Amplification of flood risks by the compound effects of precipitation and storm tides under the nonstationary scenario in the coastal city of Haikou, China. Int J Disast Risk Sc, 13(4): 602-620.

<think>好的,我现在需要解决用户的问题:如何用MATLAB检验一列数据属于何种概率分布。首先,我得回忆一下MATLAB中有哪些相关的统计工具和函数。用户提到了正态性检验,可能还涉及其他分布,比如指数分布、泊松分布等。 首先,正态分布的检验方法我记得有Kolmogorov-Smirnov检验、Lilliefors检验,还有Shapiro-Wilk检验?不过不确定MATLAB是否内置了这些函数。根据引用[1],t检验需要数据来自正态分布总体,并且方差齐性。这可能涉及到使用Lillietest函数,也就是Lilliefors检验,用于正态性检验。引用[4]也提到了lillietest和vartestn,这应该就是MATLAB中的函数。 接下来,用户可能的数据可能不符合正态分布,这时候需要非参数检验,但用户的问题是关于确定分布类型,所以可能需要拟合不同的分布,然后进行检验。比如,使用卡方拟合优度检验,或者Kolmogorov-Smirnov检验比较数据与特定分布的拟合情况。 MATLAB中的分布拟合工具有哪些呢?可能包括Distribution Fitter应用,或者使用fitdist函数来拟合分布,然后用goodnessOfFit函数评估拟合优度。另外,对于不同的分布,可能需要不同的检验方法。例如,对于正态分布,可以用lillietest,而对于其他分布,可能需要自定义方法。 步骤可能是这样的:首先进行正态性检验,如果通过,则可能属于正态分布;否则尝试其他分布,如指数分布、威布尔分布等。每种分布可能需要用特定的检验方法,或者使用卡方检验来判断拟合程度。 另外,可视化方法也很重要,比如绘制概率图(probplot),Q-Q图等,帮助直观判断数据是否符合某种分布。例如,normplot用于正态分布的概率图,如果数据点近似呈直线,则可能符合正态分布。 引用[2]中的例子可能不直接相关,但引用[4]提到的非参数检验方法如Kruskal-Wallis检验可能是在数据符合正态分布后的替代方案,但用户的问题是确定分布类型,而不是比较组间差异。 现在需要整理具体的MATLAB函数和步骤: 1. 正态性检验: - Lilliefors检验:h = lillietest(data) - Shapiro-Wilk检验:可能需要自己实现或找第三方函数。 - 安德森-达林检验:adtest函数? 2. 其他分布检验: - 卡方拟合优度检验:chi2gof - Kolmogorov-Smirnov检验:kstest,但需要指定分布参数。 3. 使用fitdist拟合不同分布,然后用goodnessOfFit计算指标,如AIC、BIC,比较不同分布的拟合情况。 4. 可视化方法:概率图,如normplot,qqplot等。 可能的流程是: 1. 首先使用正态性检验,如lillietest,如果p值大于显著性水平(如0.05),则接受正态分布假设。 2. 如果不满足正态性,尝试拟合其他分布,如指数分布、对数正态分布、威布尔分布等。对于每个候选分布,使用卡方检验或KS检验来判断拟合优度。 3. 使用分布拟合工具(如Distribution Fitter App)交互式地探索可能的分布,并比较拟合优度指标。 4. 对于KS检验,需要注意参数已知的情况,如果参数是从数据中估计的,可能需要使用修正的方法,或者依赖MATLAB内置函数处理。 需要注意,不同的检验方法对样本量的敏感度不同,比如卡方检验需要足够的样本量,分组区间内的期望频数不能太低。 具体到MATLAB代码: 例如,检验正态分布: ```matlab data = ...; % 输入数据 % 正态性检验(Lilliefors检验) [h_norm, p_norm] = lillietest(data); if h_norm == 0 disp('数据符合正态分布'); else disp('数据符合正态分布'); end ``` 检验指数分布: 可能需要用fitdist拟合指数分布,然后进行卡方检验: ```matlab pd = fitdist(data, 'Exponential'); [h_exp, p_exp] = chi2gof(data, 'CDF', pd); ``` 或者使用kstest,但需要注意参数估计的影响: ```matlab pd = fitdist(data, 'Exponential'); [h_ks, p_ks] = kstest(data, 'CDF', pd); ``` 但kstest在这种情况下可能不太准确,因为参数是从数据估计的,可能需要使用其他方法。 此外,使用Distribution Fitter App可以方便地尝试多种分布,并查看拟合情况,比如比较概率密度函数和直方图,或者查看Q-Q图。 总结步骤: 1. 导入数据到MATLAB。 2. 使用lillietest进行正态性检验。 3. 如果拒绝正态性,尝试其他分布,如指数、威布尔、对数正态等,使用fitdist和chi2gof或kstest进行检验。 4. 比较不同分布的p值或拟合优度指标,选择最合适的分布5. 可视化辅助,如概率图、Q-Q图等。 可能遇到的问题:不同分布需要不同的检验方法,有些分布可能没有现成的检验函数,需要手动实现或依赖其他工具。此时,使用拟合优度指标如AIC/BIC进行比较也是一个方法。 例如,通过计算不同分布的AIC值,选择最小的那个: ```matlab dists = {'Normal', 'Exponential', 'Lognormal', 'Weibull'}; aic = zeros(size(dists)); for i = 1:length(dists) pd = fitdist(data, dists{i}); aic(i) = pd.AIC; end [~, idx] = min(aic); best_dist = dists{idx}; ``` 这样可以根据AIC选择最佳分布。 最后,用户可能需要综合统计检验结果和可视化分析,以及信息准则来综合判断数据符合哪种分布。</think>要使用MATLAB检验一列数据属于何种概率分布,可以按照以下步骤进行: --- ### **步骤1:数据可视化初步判断** 通过绘制直方图、概率图(如Q-Q图)直观判断数据分布形态。例如: ```matlab data = randn(100,1); % 示例数据(假设为正态分布) histogram(data); % 直方图 normplot(data); % 正态概率图,若数据点近似直线,则可能符合正态分布 ``` --- ### **步骤2:正态性检验** 使用**Lilliefors检验**(改进的Kolmogorov-Smirnov检验),适用于参数未知的正态分布检验: ```matlab [h_norm, p_norm] = lillietest(data); % h_norm=0表示不拒绝正态假设(p值>0.05) ``` 若拒绝正态性(h_norm=1),则尝试其他分布[^1][^4]。 --- ### **步骤3:拟合其他分布并检验** #### **卡方拟合优度检验 (chi2gof)** 以检验指数分布为例: ```matlab pd = fitdist(data, 'Exponential'); % 拟合指数分布 [h_exp, p_exp] = chi2gof(data, 'CDF', pd); % 卡方检验 ``` #### **Kolmogorov-Smirnov检验 (kstest)** 需指定分布的参数(例如威布尔分布): ```matlab pd = fitdist(data, 'Weibull'); [h_weibull, p_weibull] = kstest(data, 'CDF', pd); ``` --- ### **步骤4:比较不同分布的拟合优度** 使用信息准则(如AIC、BIC)量化模型优劣: ```matlab dists = {'Normal', 'Exponential', 'Lognormal', 'Weibull'}; aic_values = zeros(size(dists)); for i = 1:length(dists) pd = fitdist(data, dists{i}); aic_values(i) = pd.AIC; end [~, best_idx] = min(aic_values); fprintf('最佳拟合分布:%s\n', dists{best_idx}); ``` --- ### **步骤5:使用Distribution Fitter工具(交互式)** 在MATLAB命令行输入: ```matlab distributionFitter ``` 通过图形界面选择数据、拟合分布,并直接查看拟合曲线与统计指标。 --- ### **关键函数总结** | 方法 | MATLAB函数 | 适用场景 | |---------------------|---------------------|----------------------------| | 正态性检验 | `lillietest` | 检验数据是否来自正态分布 | | 卡方拟合优度检验 | `chi2gof` | 通用分布检验(需分组数据) | | Kolmogorov-Smirnov检验 | `kstest` | 已知参数的分布检验 | | 分布拟合与信息准则 | `fitdist`, `AIC/BIC`| 量化不同分布的拟合优劣 | --- ### **示例结果解读** 若某数据的正态性检验结果为`h_norm=0`(p值>0.05),且指数分布的卡方检验`h_exp=1`(p值<0.05),则更可能符合正态分布。若AIC最小的分布为“Weibull”,则威布尔分布是最优模型。 --- ### **注意事项** 1. **样本量影响**:小样本可能降低检验效力(如卡方检验需足够数据)。 2. **参数估计误差**:K-S检验若参数由数据估计,需谨慎解读结果。 3. **多方法结合**:建议同时使用统计检验、信息准则和可视化综合判断。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值