P3分布参数拟合、KS检验与累计概率密度画图的探索

P3分布参数拟合与ks检验,累计概率密度画图 对数据进行3参数拟合(形状、尺度、位置参数),可设置ks检验的显著性水平 matlab代码,备注清楚,更改为自己的数据即可

在数据分析的世界里,对数据分布的准确把握至关重要。今天咱就来唠唠P3分布参数拟合,搭配上KS检验,顺便再画个累计概率密度图,这一套组合拳下来,能让我们对数据有更深入的理解。而且下面会给出Matlab代码,只要把数据替换成自己的,就能轻松上手。

P3分布参数拟合

P3分布也就是皮尔逊III型分布,在水文、气象等领域应用广泛。它有三个参数:形状参数(shape)、尺度参数(scale)和位置参数(location) 。拟合这三个参数,能让我们用P3分布来更好地描述手头的数据。

KS检验

KS检验(Kolmogorov - Smirnov test)是一种非参数检验方法,用来检验一个样本是否来自某一特定分布。在咱们这个场景里,就是检验数据是否符合拟合出来的P3分布。显著性水平(alpha)可以自己设置,一般常见的设置是0.05。如果检验结果的p值小于这个显著性水平,那就说明数据不太可能来自这个特定分布。

累计概率密度画图

累计概率密度函数(CDF)能直观地展示出随机变量小于等于某个值的概率。通过画出拟合分布的累计概率密度图,和实际数据的累计概率密度对比,能从视觉上判断拟合的好坏。

下面就是具体的Matlab代码啦:

% 1. 准备数据,这里以随机生成的数据为例,实际使用时替换成自己的数据
data = 10 * randn(1000, 1); % 生成1000个服从正态分布的数据作为示例

% 2. P3分布参数拟合
[params, ~] = fitdist(data, 'Pearson3');
shape = params.Shape;
scale = params.Scale;
location = params.Location;
fprintf('拟合得到的形状参数: %.4f\n', shape);
fprintf('拟合得到的尺度参数: %.4f\n', scale);
fprintf('拟合得到的位置参数: %.4f\n', location);

% 3. KS检验
alpha = 0.05; % 设置显著性水平
[h, p] = kstest(data, @(x)cdf('Pearson3',x,shape,scale,location), 'Alpha', alpha);
if h == 0
    fprintf('在显著性水平 %.2f 下,不能拒绝数据来自拟合的P3分布的假设,p值为: %.4f\n', alpha, p);
else
    fprintf('在显著性水平 %.2f 下,拒绝数据来自拟合的P3分布的假设,p值为: %.4f\n', alpha, p);
end

% 4. 累计概率密度画图
x = linspace(min(data), max(data), 100);
y_fit = cdf('Pearson3', x, shape, scale, location);
y_empirical = ecdf(data);

figure;
hold on;
plot(x, y_fit, 'r', 'DisplayName', '拟合的P3分布CDF');
plot(y_empirical, 'b', 'DisplayName', '经验CDF');
legend;
xlabel('数据值');
ylabel('累计概率');
title('P3分布拟合与经验累计概率密度对比');
hold off;

代码分析

  1. 数据准备部分
    matlab
    data = 10 * randn(1000, 1);

    这里用randn函数生成了1000个服从标准正态分布的数据,再乘以10,让数据范围有所调整。实际用的时候,把这行代码换成自己的数据导入就好,比如从文件读取数据。
  1. P3分布参数拟合部分
    matlab
    [params, ~] = fitdist(data, 'Pearson3');
    shape = params.Shape;
    scale = params.Scale;
    location = params.Location;

    fitdist函数用来对数据进行分布拟合,这里指定为Pearson3分布。它返回拟合得到的参数结构体params,从里面提取出形状、尺度和位置参数,并打印出来。
  1. KS检验部分
    matlab
    alpha = 0.05;
    [h, p] = kstest(data, @(x)cdf('Pearson3',x,shape,scale,location), 'Alpha', alpha);
    if h == 0
    fprintf('在显著性水平 %.2f 下,不能拒绝数据来自拟合的P3分布的假设,p值为: %.4f\n', alpha, p);
    else
    fprintf('在显著性水平 %.2f 下,拒绝数据来自拟合的P3分布的假设,p值为: %.4f\n', alpha, p);
    end

    先设置显著性水平alpha为0.05。kstest函数进行KS检验,第一个参数是数据data,第二个参数是拟合分布的累计分布函数,这里用@(x)cdf('Pearson3',x,shape,scale,location)来定义。根据检验结果hp值来判断是否拒绝数据来自拟合分布的假设,并打印相应信息。
  1. 累计概率密度画图部分
    matlab
    x = linspace(min(data), max(data), 100);
    yfit = cdf('Pearson3', x, shape, scale, location);
    y
    empirical = ecdf(data);

    先定义横坐标x,范围从数据的最小值到最大值,分成100个点。yfit计算拟合的P3分布在这些点上的累计概率密度值,yempirical计算经验累计概率密度值。
    matlab
    figure;
    hold on;
    plot(x, yfit, 'r', 'DisplayName', '拟合的P3分布CDF');
    plot(y
    empirical, 'b', 'DisplayName', '经验CDF');
    legend;
    xlabel('数据值');
    ylabel('累计概率');
    title('P3分布拟合与经验累计概率密度对比');
    hold off;

    这部分代码创建图形窗口,用plot函数分别画出拟合分布和经验的累计概率密度曲线,加上图例、坐标轴标签和标题,这样就能直观地对比两者啦。

希望通过上面的介绍和代码示例,大家能在自己的数据处理中熟练运用P3分布参数拟合、KS检验和累计概率密度画图这些技巧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值