Matlab:从定制的概率密度函数生成随机数
Matlab: generate random numbers from custom made probability density function
我有一个数据集,其中包含 1977-1983 年 1 月份的 3 小时降水量(见附件)。但是,我想根据这些数据生成 1984-1990 年期间的降水数据。因此,我想知道是否可以创建降水量 (1977-1983) 的定制概率密度函数,并由此生成所需时期 (1984-1990) 的随机数(降水数据)。
这在 Matlab 中可行吗?有人可以帮助我这样做吗?
提前致谢!
直方图将为您提供 PDF 的估计值——只需将 bin 计数除以样本总数即可。从那里您可以通过积分来估计 CDF。最后,您可以选择一个介于 0 和 1 之间的均匀分布的随机数,并估计产生该数字的 CDF 参数。也就是说,如果 y 是您选择的随机数,那么您想要找到满足 CDF(x) = y 的 x。 x 的值将是一个具有所需 PDF 的随机数。
如果你有'Statistics and Machine Learning Toolbox',你可以用'Kernel Distribution'方法评估数据的PDF:
Percip_pd = fitdist(Percip,'Kernel');
然后用它从相同的分布中生成 N
个随机数:
y = random(Percip_pd,N,1);
引用 @AnonSubmitter85:
"estimate the CDF by integrating. Finally, you can choose a uniformly
distributed random number between 0 and 1 and estimate the argument of
the CDF that would yield that number. That is, if y is the random
number you choose, then you want to find x such that CDF(x) = y. The
value of x will be a random number with the desired PDF."
%random sampling
N=10; %number of resamples
pdf = normrnd(0, 1, 1,100); %your pdf
s = cumsum(pdf); %its cumulative distribution
r = rand(N,1); %random numbers between 0 and 1
for ii=1:N
inds = find(s>r(ii));
indeces(ii)=inds(1); %find first value greater than the random number
end
resamples = pdf(indeces) %the resamples
我有一个数据集,其中包含 1977-1983 年 1 月份的 3 小时降水量(见附件)。但是,我想根据这些数据生成 1984-1990 年期间的降水数据。因此,我想知道是否可以创建降水量 (1977-1983) 的定制概率密度函数,并由此生成所需时期 (1984-1990) 的随机数(降水数据)。
这在 Matlab 中可行吗?有人可以帮助我这样做吗?
提前致谢!
直方图将为您提供 PDF 的估计值——只需将 bin 计数除以样本总数即可。从那里您可以通过积分来估计 CDF。最后,您可以选择一个介于 0 和 1 之间的均匀分布的随机数,并估计产生该数字的 CDF 参数。也就是说,如果 y 是您选择的随机数,那么您想要找到满足 CDF(x) = y 的 x。 x 的值将是一个具有所需 PDF 的随机数。
如果你有'Statistics and Machine Learning Toolbox',你可以用'Kernel Distribution'方法评估数据的PDF:
Percip_pd = fitdist(Percip,'Kernel');
然后用它从相同的分布中生成 N
个随机数:
y = random(Percip_pd,N,1);
引用 @AnonSubmitter85:
"estimate the CDF by integrating. Finally, you can choose a uniformly distributed random number between 0 and 1 and estimate the argument of the CDF that would yield that number. That is, if y is the random number you choose, then you want to find x such that CDF(x) = y. The value of x will be a random number with the desired PDF."
%random sampling
N=10; %number of resamples
pdf = normrnd(0, 1, 1,100); %your pdf
s = cumsum(pdf); %its cumulative distribution
r = rand(N,1); %random numbers between 0 and 1
for ii=1:N
inds = find(s>r(ii));
indeces(ii)=inds(1); %find first value greater than the random number
end
resamples = pdf(indeces) %the resamples