gpt4 book ai didi

python - 如何在 Matlab 或 Python 中使用预测的 cdf 生成一些场景?

转载 作者:行者123 更新时间:2023-12-04 10:39:59 25 4
gpt4 key购买 nike

我已经使用了 Matlab,但我也欢迎使用 python 来解决这个问题。

我有一个随机变量 Var 的预测 CDF(即 CDF^)并且想使用这个预测的 CDF (CDF^) 生成 N 个场景。这是我所做的。我想知道这种方法是否有意义,以及如何在步骤 3 中自动生成 N 个场景。

1)我在 CDF^ 上使用 MLE 拟合假设的累积分布函数(假设为 Weibull)并获得拟合函数的相应参数。

2) 使用这些参数,我绘制了假定分布的 pdf。

3)在这一步中,我不确定要做什么以及如何做!基本上我想,我应该离散化 var并通过计算每个矩形的面积,找到每个线段对应的概率。

4)我怎样才能以 PMF 形式绘制我的原始数据(var),因为它已经是 CDF 形式了?!

var= [ 0.001    0.01    97  145 150 189 202 183 248 305 492 607 1013];
cdf_prob = [0.01, 0.05, 0.15, 0.25, 0.35, 0.45, 0.50, 0.55, 0.65, 0.75, 0.85, 0.95, 0.99];
% cumulative prob.
a= mle(var, 'distribution', 'wbl');
plot(var, cdf_prob, 'o-') % my data
hold on
xgrid = linspace (0, 1.1*max(var));
plot (xgrid, wblcdf(xgrid,a(1),a(2))); % fitted cdf

figure(2) % fitted PDF
pd= makedist('wbl', 'a', a(1),'b', a(2));
y=pdf(pd, xgrid);
plot(xgrid,y)

第 3 步:
Step 3

最佳答案

生成样本:
您可以通过多种方式从分布中生成样本。如果您已经知道要使用特定的发行版,例如 Weibull distribution ,那么两个简单的选择是:

  • 使用 makedist() random() ,[1] 或
  • 使用 wblrnd() .

  • 两者都需要使用统计工具箱。无工具箱方法也是可能的。
    建议避免命名变量 var因为它掩盖了 var() 功能。
    % MATLAB R2019a
    a = [209.2863 0.5054]; % a = mle(var, 'distribution', 'wbl'); % from OP code
    NumSamples = 500;
    pd = makedist('Weibull',a(1),a(2))

    % Method 1
    X = random(pd,NumSamples,1);

    % Method 2
    X2 = wblrnd(a(1),a(2),NumSamples,1);

    绘制原始数据:
    如果数据来自连续分布,例如威 bool 分布,则应使用 probability density function (PDF)直观地显示相对机会而不是离散 probability mass function (PMF) . PMF 仅适用于离散变量。请注意 cumulative distribution functions (CDFs)适用于连续和离散随机变量。

    这可以通过 'Normalization','pdf' 来完成 histogram() 中的名称-值对特性。为了获得更好的结果,通常建议调整直方图 bin 的数量(在属性中),但只有 13 个数据点,这值(value)有限。
    h = histogram(var,'Normalization','pdf')
    h.NumBins = 13;

    您还可以根据经验数据叠加拟合分布。
    figure, hold on
    h = histogram(var,'Normalization','pdf','DisplayName','Data');
    xLimits = xlim;
    Xrng = 0:.01:xLimits(2);
    plot(Xrng,pdf(pd,Xrng),'r--','DisplayName','Fit')
    xlabel('Var')
    ylabel('Probability Density Function (PDF)')
    legend('show')

    % Adjust these manually
    ylim([0 0.02])
    h.NumBins = 13;

    替代方案: [2]

    您可以使用 fitdist() 哪个适合 kernel density并且仍然允许使用 Probability distribution objects 的所有功能,包括 random() pdf() .

    注意我已经 truncated自威 bool 指标以来的分布在 [0, inf] 上有支撑.
    pd2 = fitdist(X,'Kernel')
    pd2t = truncate(pd2,0,inf)

    然后绘图还是比较容易的,和前面的例子类似。
    figure, hold on
    h = histogram(var,'Normalization','pdf','DisplayName','Data');
    xLimits = xlim;
    Xrng = 0:.01:xLimits(2);
    plot(Xrng,pdf(pd2t,Xrng),'r--','DisplayName','Fit')
    xlabel('Var')
    ylabel('Probability Density Function (PDF)')
    legend('show')
    h.NumBins = 13;

    剩下的替代方法是利用 ksdensity() 得到情节。

    [1] Generating samples from Weibull distribution in MATLAB
    [2] 相关: https://stackoverflow.com/a/56759220/8239061

    关于python - 如何在 Matlab 或 Python 中使用预测的 cdf 生成一些场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59971640/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com