在 Matlab 中截断所需支持的泊松分布
Truncating Poisson distribution on desired support in Matlab
我想在 Matlab 中用 lambda 参数 [0.4, 0.2, 0.6]
构造一个 3 维泊松分布,我想截断它以在 [0;1;2;3;4;5]
中得到支持。这 3 个组件是独立的。
这就是我所做的
clear
n=3; %number components of the distribution
supp_marginal=0:1:5;
suppsize_marginal=size(supp_marginal,2);
supp_temp=repmat(supp_marginal.',1,n);
supp_temp_cell=num2cell(supp_temp,1);
output_temp_cell=cell(1,n);
[output_temp_cell{:}] = ndgrid(supp_temp_cell{:});
supp=zeros(suppsize_marginal^n,n);
for h=1:n
temp=output_temp_cell{h};
supp(:,h)=temp(:);
end
suppsize=size(supp,1);
lambda_1=0.4;
lambda_2=0.2;
lambda_3=0.6;
pr_mass=zeros(suppsize,1);
for j=1:suppsize
pr_mass(j)=(poisspdf(supp(j,1),lambda_1).*...
poisspdf(supp(j,2),lambda_2).*...
poisspdf(supp(j,3),lambda_3))/...
sum(poisspdf(supp(:,1),lambda_1).*...
poisspdf(supp(:,2),lambda_2).*...
poisspdf(supp(j,3),lambda_3));
end
当我计算获得的分布的平均值时,我得到 lambda_1
和 lambda_2
但不是 lambda_3
。
lambda_empirical=sum(supp.*repmat(pr_mass,1,3));
问题:为什么我没有得到lambda_3
?
tl;dr:截断会改变分布,因此需要不同的均值。
这是预料之中的,因为 truncation 本身 改变了分布 并且肯定会调整均值。您可以从下面的实验中看出这一点。请注意,对于您选择的参数,这在 lambda = 0.6.
左右开始变得明显
类似于the wiki page,这说明了E[X]之间的区别(期望X没有截断;花式均值)和 E[ X | LB≤X≤UB](X的期望鉴于它在区间 [LB,UB])。此条件期望意味着与 X (~Poisson(lambda) 的无条件分布不同的分布。
% MATLAB R2018b
% Setup
LB = 0; % lowerbound
UB = 5; % upperbound
% Simple test to compare theoretical means with and without truncation
TestLam = 0.2:0.01:1.5;
Gap = zeros(size(TestLam(:)));
for jj = 1:length(TestLam)
TrueMean = mean(makedist('Poisson','Lambda',TestLam(jj)));
TruncatedMean = mean(truncate(makedist('Poisson','Lambda',TestLam(jj)),LB,UB));
Gap(jj) = TrueMean-TruncatedMean;
end
plot(TestLam,Gap)
请注意,这些截断边界与 0.6 的 lambda 之间的差距仍然很小,并且可以忽略不计,因为 lambda 接近于零。
lam = 0.6; % <---- try different values (must be greater than 0)
pd = makedist('Poisson','Lambda',lam)
pdt = truncate(pd,LB,UB)
mean(pd) % 0.6
mean(pdt) % 0.5998
其他资源:
1. Truncated Distributions
的 Wiki
2. What is a Truncated Distribution
3. truncate()
, makedist()
的 MATLAB 文档
4. MATLAB:Working with Probability Distribution (Objects)
我想在 Matlab 中用 lambda 参数 [0.4, 0.2, 0.6]
构造一个 3 维泊松分布,我想截断它以在 [0;1;2;3;4;5]
中得到支持。这 3 个组件是独立的。
这就是我所做的
clear
n=3; %number components of the distribution
supp_marginal=0:1:5;
suppsize_marginal=size(supp_marginal,2);
supp_temp=repmat(supp_marginal.',1,n);
supp_temp_cell=num2cell(supp_temp,1);
output_temp_cell=cell(1,n);
[output_temp_cell{:}] = ndgrid(supp_temp_cell{:});
supp=zeros(suppsize_marginal^n,n);
for h=1:n
temp=output_temp_cell{h};
supp(:,h)=temp(:);
end
suppsize=size(supp,1);
lambda_1=0.4;
lambda_2=0.2;
lambda_3=0.6;
pr_mass=zeros(suppsize,1);
for j=1:suppsize
pr_mass(j)=(poisspdf(supp(j,1),lambda_1).*...
poisspdf(supp(j,2),lambda_2).*...
poisspdf(supp(j,3),lambda_3))/...
sum(poisspdf(supp(:,1),lambda_1).*...
poisspdf(supp(:,2),lambda_2).*...
poisspdf(supp(j,3),lambda_3));
end
当我计算获得的分布的平均值时,我得到 lambda_1
和 lambda_2
但不是 lambda_3
。
lambda_empirical=sum(supp.*repmat(pr_mass,1,3));
问题:为什么我没有得到lambda_3
?
tl;dr:截断会改变分布,因此需要不同的均值。
这是预料之中的,因为 truncation 本身 改变了分布 并且肯定会调整均值。您可以从下面的实验中看出这一点。请注意,对于您选择的参数,这在 lambda = 0.6.
左右开始变得明显类似于the wiki page,这说明了E[X]之间的区别(期望X没有截断;花式均值)和 E[ X | LB≤X≤UB](X的期望鉴于它在区间 [LB,UB])。此条件期望意味着与 X (~Poisson(lambda) 的无条件分布不同的分布。
% MATLAB R2018b
% Setup
LB = 0; % lowerbound
UB = 5; % upperbound
% Simple test to compare theoretical means with and without truncation
TestLam = 0.2:0.01:1.5;
Gap = zeros(size(TestLam(:)));
for jj = 1:length(TestLam)
TrueMean = mean(makedist('Poisson','Lambda',TestLam(jj)));
TruncatedMean = mean(truncate(makedist('Poisson','Lambda',TestLam(jj)),LB,UB));
Gap(jj) = TrueMean-TruncatedMean;
end
plot(TestLam,Gap)
请注意,这些截断边界与 0.6 的 lambda 之间的差距仍然很小,并且可以忽略不计,因为 lambda 接近于零。
lam = 0.6; % <---- try different values (must be greater than 0)
pd = makedist('Poisson','Lambda',lam)
pdt = truncate(pd,LB,UB)
mean(pd) % 0.6
mean(pdt) % 0.5998
其他资源:
1. Truncated Distributions
的 Wiki
2. What is a Truncated Distribution
3. truncate()
, makedist()
的 MATLAB 文档
4. MATLAB:Working with Probability Distribution (Objects)