如何在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
相关产品推荐
相关产品推荐

