Matlab概率分布拟合,qq图,pp图检验图,置信区间计算,重现期推算,ks检验,边缘分布计算,

Matlab概率分布拟合,qq图,pp图检验图,置信区间计算,重现期推算,ks检验,边缘分布计算,包括如下:

Matlab/Python概率密度函数(pdf)和累计概率密度函数拟合(cdf)支持定制,包括不限于如下:(重现期极值计算)

  1. Beta Distribution (Beta 分布)
  2. Binomial Distribution (二项分布)
  3. Birnbaum-Saunders Distribution (伯恩鲍姆-桑德斯分布)
  4. Burr Distribution (伯尔分布)
  5. Exponential Distribution (指数分布)
  6. Extreme Value Distribution (极值分布)
  7. Gamma Distribution (gamma 分布)
  8. Generalized Extreme Value Distribution (广义极值分布)
  9. Generalized Pareto Distribution (广义帕累托分布)
  10. Half Normal Distribution (半正态分布)
  11. Inverse Gaussian Distribution (逆高斯分布)
  12. Kernel Distribution (核分布)
  13. Logistic Distribution (逻辑分布)
  14. Loglogistic Distribution (对数逻辑分布)
  15. Lognormal Distribution (对数正态分布)
  16. Nakagami Distribution (Nakagami 分布)
  17. Negative Binomial Distribution (负二项分布)
  18. Normal Distribution (正态分布)
  19. Poisson Distribution (泊松分布)
  20. Rayleigh Distribution (瑞利分布)
  21. Rician Distribution (莱斯分布)
  22. Stable Distribution (稳定分布)
  23. t Location-Scale Distribution (t 位置尺度分布)
  24. 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. 总结

该代码实现了以下功能:

  1. 概率分布拟合:支持多种常见分布。
  2. QQ 图和 PP 图:用于检验分布拟合效果。
  3. 置信区间计算:基于正态近似法。
  4. 重现期推算:根据目标重现期计算极值。
  5. KS 检验:验证数据是否符合拟合分布。

希望这些代码能够帮助你完成概率分布分析任务!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值