离散表面积分与cumsum

时间:2014-06-05 22:37:55

标签: matlab probability cdf cumsum

我有一个矩阵z(x,y)Arbitrary multinomial pdf := z 这是一个NxN abitary pdf,由独特的核密度估计构建(即不是通常的pdf,它没有函数)。它是多变量的,不能分离,是离散数据。

我不想构造一个NxN矩阵(F(x,y)),它是这个pdf的2维中的累积分布函数,这样我就可以随机抽样F(x,y)= P(x < X,y< Y);

分析我认为多元函数的CDF是pdf的表面积分。

我所尝试的是使用cumsum函数来计算表面积分并使用多元法线对分析解进行测试,并且两者之间似乎存在一些差异:

% multivariate parameters
delta = 100;
mu = [1 1];
Sigma = [0.25 .3; .3 1];
x1 = linspace(-2,4,delta); x2 = linspace(-2,4,delta);
[X1,X2] = meshgrid(x1,x2);
% Calculate Normal multivariate pdf
F = mvnpdf([X1(:) X2(:)],mu,Sigma);
F = reshape(F,length(x2),length(x1));
% My attempt at a numerical surface integral 
FN = cumsum(cumsum(F,1),2);
% Normalise the CDF
FN = FN./max(max(FN));
X = [X1(:) X2(:)];
% Analytic solution to a multivariate normal pdf
p = mvncdf(X,mu,Sigma);
p = reshape(p,delta,delta);
% Highlight the difference
dif = p - FN;
error = max(max(sqrt(dif.^2)));
% %% Plot
figure(1)
surf(x1,x2,F);
caxis([min(F(:))-.5*range(F(:)),max(F(:))]);
xlabel('x1'); ylabel('x2'); zlabel('Probability Density');
figure(2)
surf(X1,X2,FN);
xlabel('x1'); ylabel('x2');
figure(3);
surf(X1,X2,p);
xlabel('x1'); ylabel('x2');
figure(5)
surf(X1,X2,dif)
xlabel('x1'); ylabel('x2');

特别是错误似乎是在过渡区域中最重要的。

有没有人有更好的解决方案来解决这个问题,或者看看我做错了什么? 任何帮助将不胜感激!

编辑:这是累积积分的理想结果,这个函数对我来说有价值的原因是当你在闭区间[0,1]上从这个函数中随机生成样本时更高权重(即更可能)的值更常出现,这样,样本收敛于期望值(在多个峰值的情况下),这是诸如粒子滤波器,神经网络等算法的期望结果。 multivariate cdf

2 个答案:

答案 0 :(得分:1)

首先考虑1维案例。你有一个由向量​​F表示的函数,并且想要进行数字积分。 cumsum(F)会做到这一点,但它使用的是一种糟糕的数值积分形式。即,它将F视为阶梯函数。您可以使用Trapezoidal ruleSimpson's rule进行更准确的数值积分。

二维情况也不例外。您对cumsum(cumsum(F,1),2)的使用再次将F视为阶梯函数,并且随着积分维数的增加,该假设产生的数值误差会变得更糟。存在梯形规则和辛普森规则的二维类似物。由于这里有一些太多的数学重复,请看一下: http://onestopgate.com/gate-study-material/mathematics/numerical-analysis/numerical-integration/2d-trapezoidal.asp

答案 1 :(得分:0)

您不需要计算概率密度函数的二维积分,以便从分布中进行采样。如果您正在计算2-d积分,那么您将错误地解决问题。

以下是解决抽样问题的两种方法。

(1)你写道你有一个核密度估计。核密度估计是混合密度的特殊情况。可以通过首先选择一个内核(可能不同或相同加权,应用相同的过程),然后从该内核采样来对任何混合密度进行采样。 (这适用于任何数量的维度。)通常,内核是一些相对简单的分布,例如高斯分布,因此很容易从中进行采样。

(2)任何接合密度P(X,Y)等于P(X | Y)P(Y)(并且等效地为P(Y | X)P(X))。因此,您可以从P(Y)(或P(X))然后从P(X | Y)进行采样。为了从P(X | Y)进行采样,你需要沿着Y = y线(其中y是Y的采样值)积分P(X,Y),但是(这是至关重要的)你只需要整合这条线;您不需要整合X和Y的所有值。

如果您告诉我们有关您的问题的更多信息,我可以提供详细信息。