假设我在支持A上有一个连续的概率分布,例如正态分布。假设有一个Matlab代码可以让我从这样的分布中提取随机数,例如this。
我想构建一个Matlab代码,以概率质量函数“跨越” r 个点来“近似”这种连续概率分布。
这意味着我想将Matlab代码编写为:
(1)从A中选择r个点。让我们称这些点为a1,a2,...,ar。这些要点将构成新的离散支持。
(2)构造a1,a2,...,ar上的概率质量函数。此概率质量函数应“很好”近似原始连续概率分布。
您能否通过提供一个示例来帮助您? This是问朱莉娅的类似问题。
这是我的一些想法。假设感兴趣的连续概率分布是一维的。一种可能的方式是:
(1)从感兴趣的连续概率分布中提取10 ^ 6个随机数,并将其存储在列向量D中。
(2)假设r = 10。计算D的第10个,第20个,...,第90个分位数。找到落入获得的10个仓中的每个仓中的中点。将这些中点称为a1,...,ar。
如何从这里构造概率质量函数? 另外,如何将这一过程推广到一个以上的维度?
使用histcounts
更新:我考虑过使用histcounts
。您认为这是有效的选择吗?对于许多尺寸,我可以使用this。
clear
rng default
%(1) Draw P random numbers for standard normal distribution
P=10^6;
X = randn(P,1);
%(2) Apply histcounts
[N,edges] = histcounts(X);
%(3) Construct the new discrete random variable
%(3.1) The support of the discrete random variable is the collection of the mean values of each bin
supp=zeros(size(N,2),1);
for j=2:size(N,2)+1
supp(j-1)=(edges(j)-edges(j-1))/2+edges(j-1);
end
%(3.2) The probability mass function of the discrete random variable is the
%number of X within each bin divided by P
pmass=N/P;
%(4) Check if the approximation is OK
%(4.1) Find the CDF of the discrete random variable
CDF_discrete=zeros(size(N,2),1);
for h=2:size(N,2)+1
CDF_discrete(h-1)=sum(X<=edges(h))/P;
end
%(4.2) Plot empirical CDF of the original random variable and CDF_discrete
ecdf(X)
hold on
scatter(supp, CDF_discrete)
答案 0 :(得分:-1)
我不知道这是否是您想要的,但也许可以帮到您。您知道,P(X = x) = 0
对于连续概率分布中的任何点,即X映射到x的逐点概率很小,因此为0。
为了将其近似为离散的概率空间,您可以做的是定义一些点(x_1, x_2, ..., x_n)
,并让它们的离散概率成为PDF范围的整数(从连续概率中得出)分布),即
P(x_1) = P(X \in (-infty, x_1_end)), P(x_2) = P(X \in (x_1_end, x_2_end)), ..., P(x_n) = P(X \in (x_(n-1)_end, +infty))
:-)