绘制归一化均匀混合物
Plot normalized uniform mixture
我需要在下面重现归一化密度 p(x),但给出的代码不会生成归一化 PDF。
clc, clear
% Create three distribution objects with different parameters
pd1 = makedist('Uniform','lower',2,'upper',6);
pd2 = makedist('Uniform','lower',2,'upper',4);
pd3 = makedist('Uniform','lower',5,'upper',6);
% Compute the pdfs
x = -1:.01:9;
pdf1 = pdf(pd1,x);
pdf2 = pdf(pd2,x);
pdf3 = pdf(pd3,x);
% Sum of uniforms
pdf = (pdf1 + pdf2 + pdf3);
% Plot the pdfs
figure;
stairs(x,pdf,'r','LineWidth',2);
如果我通过简单地按它们的总和缩放它们来计算归一化混合 PDF,与上面的原始数字相比,我有不同的归一化概率。
pdf = pdf/sum(pdf);
混合
A mixture 两个随机变量意味着概率 p 使用分布 1,概率 1-p 使用分布 2.
根据你的图表,你似乎在混合分布而不是添加(卷积)它们。精确的结果对 混合概率 非常重要。例如,我选择了 a = 0.25
、b = 0.35
和 c = 1-a-b
。
对于混合物,probability density function (PDF) 是分析可用的:
pdfMix =@(x) a.*pdf(pd1,x) + b.*pdf(pd2,x) + c.*pdf(pd3,x)
.
% MATLAB R2018b
pd1 = makedist('Uniform',2,6);
pd2 = makedist('Uniform',2,4);
pd3 = makedist('Uniform',5,6);
a = 0.25;
b = 0.35;
c = 1 - a - b; % a + b + c = 1
pdfMix =@(x) a.*pdf(pd1,x) + b.*pdf(pd2,x) + c.*pdf(pd3,x);
Xrng = 0:.01:8;
plot(Xrng,pdfMix(Xrng))
xlabel('X')
ylabel('Probability Density Function')
由于混合分布是统一的,您还可以使用 stairs()
命令:stairs(Xrng,pdfMix(Xrng))
.
我们可以通过确保总面积为 1 来验证这是一个有效的 PDF。
integral(pdfMix,0,9)
ans = 1.0000
卷积:添加随机变量
将随机变量相加会产生不同的结果。同样,这可以凭经验轻松完成。这在分析上是可能的。例如,对两个 Uniform(0,1) 分布进行卷积会产生一个 Triangular(0,1,2) 分布。随机变量的 convolution 只是一种奇特的说法,我们 将它们相加 如果您对分析结果感兴趣,还有一种方法可以使用积分获得生成的 PDF .
N = 80000; % Number of samples
X1 = random(pd1,N,1); % Generate samples
X2 = random(pd2,N,1);
X3 = random(pd3,N,1);
X = X1 + X2 + X3; % Convolution
请注意 x-axis (Xrng = 0:.01:16;
) 的比例变化。
为了获得这个,我从每个分布中生成了 80k 个样本 random()
then added them up to obtain 80k samples of the desired convolution. Notice when I used histogram()
我使用了 'Normalization', 'pdf'
选项。
Xrng = 0:.01:16;
figure, hold on, box on
p(1) = plot(Xrng,pdf(pd1,Xrng),'DisplayName','X1 \sim U(2,6)')
p(2) = plot(Xrng,pdf(pd2,Xrng),'DisplayName','X2 \sim U(2,4)')
p(3) = plot(Xrng,pdf(pd3,Xrng),'DisplayName','X3 \sim U(5,6)')
h = histogram(X,'Normalization','pdf','DisplayName','X = X1 + X2 + X3')
% Cosmetics
legend('show','Location','northeast')
for k = 1:3
p(k).LineWidth = 2.0;
end
title('X = X1 + X2 + X3 (50k samples)')
xlabel('X')
ylabel('Probability Density Function (PDF)')
您可以在生成的内核分发对象上使用 fitdist()
and the Kernel distribution object then calling the pdf()
命令获得 PDF 的估计值。
pd_kernel = fitdist(X,'Kernel')
figure, hold on, box on
h = histogram(X,'Normalization','pdf','DisplayName','X = X1 + X2 + X3')
pk = plot(Xrng,pdf(pd_kernel,Xrng),'b-') % Notice use of pdf command
legend('Empirical','Kernel Distribution','Location','northwest')
如果执行此操作,您会注意到生成的内核是无界的,但您可以更正此问题,因为您使用可以直接访问的 truncate()
. You could also use the ksdensity()
function, though the probability distribution object approach is probably more user friendly due to all the functions 知道边界。您应该知道内核是一个近似值(您可以在内核图中清楚地看到)。在这种情况下,对 3 个均匀分布进行卷积的集成并不算太糟糕,因此如果需要 PDF,则通过分析找到 PDF 可能是首选。否则,经验方法(尤其是对于生成)可能就足够了,尽管这取决于您的应用程序。
pdt_kernel = truncate(pd_kernel,9,16)
从混合和卷积生成样本是一个不同的问题(但可管理)。
我需要在下面重现归一化密度 p(x),但给出的代码不会生成归一化 PDF。
clc, clear
% Create three distribution objects with different parameters
pd1 = makedist('Uniform','lower',2,'upper',6);
pd2 = makedist('Uniform','lower',2,'upper',4);
pd3 = makedist('Uniform','lower',5,'upper',6);
% Compute the pdfs
x = -1:.01:9;
pdf1 = pdf(pd1,x);
pdf2 = pdf(pd2,x);
pdf3 = pdf(pd3,x);
% Sum of uniforms
pdf = (pdf1 + pdf2 + pdf3);
% Plot the pdfs
figure;
stairs(x,pdf,'r','LineWidth',2);
如果我通过简单地按它们的总和缩放它们来计算归一化混合 PDF,与上面的原始数字相比,我有不同的归一化概率。
pdf = pdf/sum(pdf);
混合
A mixture 两个随机变量意味着概率 p 使用分布 1,概率 1-p 使用分布 2.
根据你的图表,你似乎在混合分布而不是添加(卷积)它们。精确的结果对 混合概率 非常重要。例如,我选择了 a = 0.25
、b = 0.35
和 c = 1-a-b
。
对于混合物,probability density function (PDF) 是分析可用的:
pdfMix =@(x) a.*pdf(pd1,x) + b.*pdf(pd2,x) + c.*pdf(pd3,x)
.
% MATLAB R2018b
pd1 = makedist('Uniform',2,6);
pd2 = makedist('Uniform',2,4);
pd3 = makedist('Uniform',5,6);
a = 0.25;
b = 0.35;
c = 1 - a - b; % a + b + c = 1
pdfMix =@(x) a.*pdf(pd1,x) + b.*pdf(pd2,x) + c.*pdf(pd3,x);
Xrng = 0:.01:8;
plot(Xrng,pdfMix(Xrng))
xlabel('X')
ylabel('Probability Density Function')
由于混合分布是统一的,您还可以使用 stairs()
命令:stairs(Xrng,pdfMix(Xrng))
.
我们可以通过确保总面积为 1 来验证这是一个有效的 PDF。
integral(pdfMix,0,9)
ans = 1.0000
卷积:添加随机变量
将随机变量相加会产生不同的结果。同样,这可以凭经验轻松完成。这在分析上是可能的。例如,对两个 Uniform(0,1) 分布进行卷积会产生一个 Triangular(0,1,2) 分布。随机变量的 convolution 只是一种奇特的说法,我们 将它们相加 如果您对分析结果感兴趣,还有一种方法可以使用积分获得生成的 PDF .
N = 80000; % Number of samples
X1 = random(pd1,N,1); % Generate samples
X2 = random(pd2,N,1);
X3 = random(pd3,N,1);
X = X1 + X2 + X3; % Convolution
请注意 x-axis (Xrng = 0:.01:16;
) 的比例变化。
为了获得这个,我从每个分布中生成了 80k 个样本 random()
then added them up to obtain 80k samples of the desired convolution. Notice when I used histogram()
我使用了 'Normalization', 'pdf'
选项。
Xrng = 0:.01:16;
figure, hold on, box on
p(1) = plot(Xrng,pdf(pd1,Xrng),'DisplayName','X1 \sim U(2,6)')
p(2) = plot(Xrng,pdf(pd2,Xrng),'DisplayName','X2 \sim U(2,4)')
p(3) = plot(Xrng,pdf(pd3,Xrng),'DisplayName','X3 \sim U(5,6)')
h = histogram(X,'Normalization','pdf','DisplayName','X = X1 + X2 + X3')
% Cosmetics
legend('show','Location','northeast')
for k = 1:3
p(k).LineWidth = 2.0;
end
title('X = X1 + X2 + X3 (50k samples)')
xlabel('X')
ylabel('Probability Density Function (PDF)')
您可以在生成的内核分发对象上使用 fitdist()
and the Kernel distribution object then calling the pdf()
命令获得 PDF 的估计值。
pd_kernel = fitdist(X,'Kernel')
figure, hold on, box on
h = histogram(X,'Normalization','pdf','DisplayName','X = X1 + X2 + X3')
pk = plot(Xrng,pdf(pd_kernel,Xrng),'b-') % Notice use of pdf command
legend('Empirical','Kernel Distribution','Location','northwest')
如果执行此操作,您会注意到生成的内核是无界的,但您可以更正此问题,因为您使用可以直接访问的 truncate()
. You could also use the ksdensity()
function, though the probability distribution object approach is probably more user friendly due to all the functions 知道边界。您应该知道内核是一个近似值(您可以在内核图中清楚地看到)。在这种情况下,对 3 个均匀分布进行卷积的集成并不算太糟糕,因此如果需要 PDF,则通过分析找到 PDF 可能是首选。否则,经验方法(尤其是对于生成)可能就足够了,尽管这取决于您的应用程序。
pdt_kernel = truncate(pd_kernel,9,16)
从混合和卷积生成样本是一个不同的问题(但可管理)。