【问题标题】:Function to transform empirical distribution to a uniform distribution in Matlab?在Matlab中将经验分布转换为均匀分布的函数?
【发布时间】:2012-07-04 06:55:02
【问题描述】:

我知道使用 CDF 将一种分布转换为另一种分布的过程。但是,我想知道 Matlab 中是否存在可以执行此任务的函数?

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

【问题讨论】:

    标签: matlab statistics distribution uniform cdf


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但在提问之前我在搜索时遇到了这个问题!
    【解决方案2】:

    正如您所说,您所需要的只是 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
    

    【讨论】:

    • 如果我有一个正常的经验CDF,但没有通过解析公式扣除,那么您的代码将如何变化?谢谢。
    • @S_H:我不确定我是否理解。分布是正常的,或者不是。您是在问它对于不同的均值和方差会如何变化?
    • 换一种说法吧。我有一个经验分布,我想将其转换为均匀分布。我有那个经验分布的 CDF。在那种情况下,您的答案将如何变化?谢谢!
    • @S_H:将 C 替换为计算 CDF 的函数。
    • 在这种情况下我如何将其转换为均匀分布? x 是从正态分布中采样的随机数,我拥有的 CDF 是经验分布。我的最终分布如何统一?
    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2013-09-17
      • 2019-05-27
      • 2010-09-09
      • 1970-01-01
      • 2012-10-11
      • 2013-03-25
      • 2021-03-10
      • 1970-01-01
      相关资源
      最近更新 更多