Matlab概率分布拟合,qq图,pp图检验图,置信区间计算,重现期推算,ks检验,边缘分布计算,包括如下:
Matlab/Python概率密度函数(pdf)和累计概率密度函数拟合(cdf)支持定制,包括不限于如下:(重现期极值计算)
- Beta Distribution (Beta 分布)
- Binomial Distribution (二项分布)
- Birnbaum-Saunders Distribution (伯恩鲍姆-桑德斯分布)
- Burr Distribution (伯尔分布)
- Exponential Distribution (指数分布)
- Extreme Value Distribution (极值分布)
- Gamma Distribution (gamma 分布)
- Generalized Extreme Value Distribution (广义极值分布)
- Generalized Pareto Distribution (广义帕累托分布)
- Half Normal Distribution (半正态分布)
- Inverse Gaussian Distribution (逆高斯分布)
- Kernel Distribution (核分布)
- Logistic Distribution (逻辑分布)
- Loglogistic Distribution (对数逻辑分布)
- Lognormal Distribution (对数正态分布)
- Nakagami Distribution (Nakagami 分布)
- Negative Binomial Distribution (负二项分布)
- Normal Distribution (正态分布)
- Poisson Distribution (泊松分布)
- Rayleigh Distribution (瑞利分布)
- Rician Distribution (莱斯分布)
- Stable Distribution (稳定分布)
- t Location-Scale Distribution (t 位置尺度分布)
- Weibull Distribution (威布尔分布)
文章目录
以下是一个完整的 MATLAB 程序,用于实现概率分布拟合、QQ 图和 PP 图绘制、置信区间计算、重现期推算、Kolmogorov-Smirnov (KS) 检验以及边缘分布计算。代码包含详细的注释,方便理解与扩展。
1. 主程序:概率分布拟合与分析
1.1 主函数
function DistributionAnalysis()
% 数据准备
data = load('data.mat'); % 假设数据存储在 data.mat 文件中
X = data.X; % 输入数据
% 1. 概率分布拟合
[bestDist, params] = fitDistribution(X);
% 2. 绘制 QQ 图和 PP 图
plotQQandPP(X, bestDist, params);
% 3. 计算置信区间
confidenceInterval = calculateConfidenceInterval(bestDist, params);
fprintf('95%% 置信区间: [%f, %f]\n', confidenceInterval(1), confidenceInterval(2));
% 4. 推算重现期对应的极值
returnPeriods = [10, 50, 100]; % 目标重现期
extremeValues = calculateReturnPeriod(bestDist, params, returnPeriods);
fprintf('重现期对应的极值: %s\n', mat2str(extremeValues));
% 5. Kolmogorov-Smirnov 检验
[h, pValue] = kstest(X, bestDist, params);
if h == 0
fprintf('KS 检验结果: 无法拒绝原假设(p-value = %f)\n', pValue);
else
fprintf('KS 检验结果: 拒绝原假设(p-value = %f)\n', pValue);
end
end
2. 边缘分布拟合
2.1 分布拟合函数
function [bestDist, params] = fitDistribution(data)
% 常见分布类型
distNames = {'normal', 'lognormal', 'gamma', 'weibull', 'gev'};
% 初始化评估指标
aicValues = zeros(length(distNames), 1);
bicValues = zeros(length(distNames), 1);
% 拟合每种分布
for i = 1:length(distNames)
pd = fitdist(data, distNames{i});
% 计算 AIC 和 BIC
logLikelihood = sum(log(pdf(pd, data)));
numParams = numel(pd.ParameterValues);
aicValues(i) = -2 * logLikelihood + 2 * numParams;
bicValues(i) = -2 * logLikelihood + log(length(data)) * numParams;
end
% 选择最优分布
[~, idx] = min(aicValues); % 根据 AIC 选择
bestDist = fitdist(data, distNames{idx});
params = bestDist.ParameterValues;
end
3. QQ 图和 PP 图绘制
3.1 QQ 图和 PP 图绘制函数
function plotQQandPP(data, dist, params)
% 计算理论分位数和经验分位数
sortedData = sort(data);
n = length(sortedData);
empiricalQuantiles = (1:n)' / (n + 1); % 经验分布
theoreticalQuantiles = cdf(dist, sortedData, params{:}); % 理论分布
% QQ 图
figure;
subplot(1, 2, 1);
qqplot(data, dist, params{:});
title('QQ Plot');
% PP 图
subplot(1, 2, 2);
scatter(theoreticalQuantiles, empiricalQuantiles, 'b');
hold on;
plot([0, 1], [0, 1], 'r--'); % 对角线
xlabel('Theoretical Quantiles');
ylabel('Empirical Quantiles');
title('PP Plot');
end
—
4. 置信区间计算
4.1 置信区间计算函数
function confidenceInterval = calculateConfidenceInterval(dist, params)
% 使用正态近似法计算 95% 置信区间
alpha = 0.05; % 显著性水平
z = norminv(1 - alpha / 2); % 标准正态分布的临界值
switch dist.Name
case 'normal'
mu = params(1);
sigma = params(2);
confidenceInterval = [mu - z * sigma, mu + z * sigma];
case 'lognormal'
mu = params(1);
sigma = params(2);
confidenceInterval = exp([mu - z * sigma, mu + z * sigma]);
case 'gamma'
a = params(1);
b = params(2);
confidenceInterval = gaminv([alpha / 2, 1 - alpha / 2], a, b);
case 'weibull'
a = params(1);
b = params(2);
confidenceInterval = wblinv([alpha / 2, 1 - alpha / 2], a, b);
case 'gev'
k = params(1);
sigma = params(2);
mu = params(3);
confidenceInterval = gevinv([alpha / 2, 1 - alpha / 2], k, sigma, mu);
end
end
5. 重现期推算
5.1 重现期推算函数
function extremeValues = calculateReturnPeriod(dist, params, returnPeriods)
% 根据分布类型计算重现期对应的极值
extremeValues = zeros(size(returnPeriods));
for i = 1:length(returnPeriods)
p = 1 - 1 / returnPeriods(i);
switch dist.Name
case 'normal'
extremeValues(i) = norminv(p, params(1), params(2));
case 'lognormal'
extremeValues(i) = logninv(p, params(1), params(2));
case 'gamma'
extremeValues(i) = gaminv(p, params(1), params(2));
case 'weibull'
extremeValues(i) = wblinv(p, params(1), params(2));
case 'gev'
extremeValues(i) = gevinv(p, params(1), params(2), params(3));
end
end
end
6. KS 检验
6.1 KS 检验函数
function [h, pValue] = kstest(data, dist, params)
% 计算理论 CDF
cdfValues = cdf(dist, data, params{:});
% 执行 KS 检验
[h, pValue] = kstest(data, 'CDF', @(x) cdf(dist, x, params{:}));
end
7. 总结
该代码实现了以下功能:
- 概率分布拟合:支持多种常见分布。
- QQ 图和 PP 图:用于检验分布拟合效果。
- 置信区间计算:基于正态近似法。
- 重现期推算:根据目标重现期计算极值。
- KS 检验:验证数据是否符合拟合分布。
希望这些代码能够帮助你完成概率分布分析任务!