在Matlab中将经验分布转换为均匀分布的函数?

时间:2012-07-03 19:22:22

标签: matlab statistics distribution uniform cdf

我知道通过使用CDF将一个发行版转换为另一个发行版的过程。但是,我想知道Matlab中是否存在可以执行此任务的现有功能?

我的另一个相关问题是我使用Matlab中的ecdf()函数计算了我的经验的CDF,以获得10,000值的分布。但是,我从中获得的输出仅包含9967个值。如何获得CDF的总10,000值?感谢。

3 个答案:

答案 0 :(得分:1)

正如你所说,你需要的只是CDF。 CDF of a normal distribution可以用erf Matlab函数表示。

未经测试的例子:

C = @(x)(0.5 * (1 + erf(x/sqrt(2))));

x = randn(1,1000);  % Zero-mean, unit variance
y = C(x);           % Approximately uniform

答案 1 :(得分:1)

for t=1:nT 
    [f_CDFTemp,x_CDFTemp]=ecdf(uncon_noise_columndata_all_nModels_diff_t(:,1,t)); % compute CDF of empirical distribution
    f_CDF(1:length(f_CDFTemp),t) = f_CDFTemp; % store the CDF of different distributions with unequal size in a new variable
    x_CDF(1:length(x_CDFTemp),t) = x_CDFTemp;
    b_unifdist=4*t;
    [Noise.N, Noise.X]=hist((a_unifdist+(b_unifdist-a_unifdist).*f_CDF(:,t)),100); % generate the uniform distribution by using the CDF of empirical distribution as the CDF of the uniform distribution
    generatedNoise(:,:,t)=emprand(Noise.X,nRows,nCol); % sample some random numbers from the uniform distribution generated above by using 'emrand' function
end

答案 2 :(得分:0)

This is not exactly what you are looking for,但它显示了如何做相反的事情。扭转它不应该那么糟糕。