You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB中绘制GEV分布的置信区间及观测数据?

GEV分布图添加观测数据与置信区间实现方案

假设你使用的是MATLAB(因为gevfit()是MATLAB统计工具箱中的函数),以下是完整的实现步骤与代码:

1. 基础参数获取与拟合曲线生成

首先通过gevfit()获取GEV分布的位置、尺度、形状参数,再生成拟合的分布曲线(以CDF为例,若需PDF可替换为gevpdf()):

% 假设x是你的观测数据
params = gevfit(x);
loc = params(1);    % 位置参数
scale = params(2);  % 尺度参数
shape = params(3);  % 形状参数

% 生成拟合曲线的x轴范围(覆盖数据范围并适当扩展)
x_fit = linspace(min(x)-std(x), max(x)+std(x), 1000);
% 计算拟合的GEV累积分布函数
cdf_fit = gevcdf(x_fit, loc, scale, shape);

2. 添加观测数据的经验分布

使用ecdf()函数生成观测数据的经验CDF,以散点形式展示:

[f_emp, x_emp] = ecdf(x);

3. 计算分布曲线的置信区间

采用参数bootstrap方法计算95%置信区间(比仅用参数置信区间更准确):

n_boot = 1000;  % bootstrap迭代次数
cdf_boot = zeros(n_boot, length(x_fit));

for i = 1:n_boot
    % 有放回抽样生成bootstrap样本
    x_boot = datasample(x, length(x), 'Replace', true);
    % 拟合bootstrap样本的GEV参数
    params_boot = gevfit(x_boot);
    % 计算bootstrap样本的CDF
    cdf_boot(i,:) = gevcdf(x_fit, params_boot(1), params_boot(2), params_boot(3));
end

% 提取95%置信区间的上下限
cdf_lower = prctile(cdf_boot, 2.5, 1);
cdf_upper = prctile(cdf_boot, 97.5, 1);

4. 整合绘图

将观测数据、拟合曲线、置信区间整合到同一张图中:

figure;
% 绘制观测数据的经验CDF散点
plot(x_emp, f_emp, 'ko', 'MarkerSize', 4, 'DisplayName', '观测数据');
hold on;
% 绘制GEV拟合CDF曲线
plot(x_fit, cdf_fit, 'r-', 'LineWidth', 2, 'DisplayName', 'GEV拟合CDF');
% 填充置信区间
fill([x_fit, fliplr(x_fit)], [cdf_lower, fliplr(cdf_upper)], 'b', 'FaceAlpha', 0.2, 'EdgeColor', 'none', 'DisplayName', '95%置信区间');

% 图表美化
legend('Location', 'best');
xlabel('变量值');
ylabel('累积概率');
title('GEV分布拟合与观测数据对比');
grid on;

补充说明

  • 若需要绘制概率密度函数(PDF),只需将代码中的gevcdf()替换为gevpdf(),经验分布可改用histogram(x, 'Normalization', 'pdf')绘制归一化直方图。
  • 若gevfit()返回参数的置信区间([params, ci] = gevfit(x)),也可通过参数上下限分别计算CDF/PDF的边界,但bootstrap方法对非对称分布的置信区间估计更可靠。

内容的提问来源于stack exchange,提问作者JamZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:21:23