【问题标题】:uniform distribution fitting in matlabmatlab中的均匀分布拟合
【发布时间】:2012-10-11 08:59:06
【问题描述】:

我有一个数据集,希望将它们拟合到均匀分布并使用 Matlab 计算拟合优度。但是,我发现制服不包含在函数“fitdist”中。 Matlab有什么方法可以做均匀分布拟合吗?

【问题讨论】:

  • 我只是想知道我的回答对你有用吗?如果没有,请告诉我原因,也许我可以改进它。干杯。

标签: matlab distribution model-fitting


【解决方案1】:

当您说您希望将数据集拟合到均匀分布时,我假设您的意思是您希望估计最适合您的数据集的均匀分布的参数。

这实际上是一个非常有趣的问题。 fitdist 没有帮助我并不感到惊讶,因为均匀分布有点特殊。例如,可以证明,在某些情况下,均匀分布的参数的最大似然估计不存在,而在其他情况下,没有唯一解。

那么,该怎么办?好吧,均匀分布有两个参数,ab,它们定义了密度的下限和上限。让X 表示您的数据集(例如,观察的列向量)。 ab 的简单估计是:

a = min(X);
b = max(X);

当然,这些估计几乎肯定会高估(对于a)和低估(对于b)真实参数,因为从密度中抽取的随机样本不太可能正好落在边界。

对于已知a为0的情况,b的最小方差无偏估计为:

b = max(X) + (max(X) / length(X))

这个估计器与著名的German Tank Problem 有关。对于一般情况,我实际上并不知道任何估计理论(尽管我确信一定有一些)。我的第一个猜测是使用朴素的最小/最大估计器,但减去并添加数据集中观察值之间的平均距离,即:

a = min(X) - c;
b = max(X) + c;

在哪里

c = (max(X) - min(X)) / length(X)

至于拟合优度,希望 SO 上的其他人知道一些事情,因为我需要自己做一些研究来回答这个问题。祝你好运!

【讨论】:

    【解决方案2】:

    根据 Colin 的回答,可以使用 Pearson's chi-squared test 计算均匀分布的拟合优度。

    如果您可以访问 Matlab 统计工具箱,您可以使用 chi2gof 函数相当简单地执行此操作。文档中的示例 3 展示了如何将其应用于均匀分布。

    【讨论】:

      【解决方案3】:

      将您的变量转换为正态分布变量并使用“kstest”。 因此,如果您有一个从 a 到 b 统一的变量 X,请编写以下代码

      X_uni=(X-a)/(b-a); %Uniform 0,1 variable

      X_norm=norminv(X_uni); % transform to normal distributed variable
      [h,P]=kstest(X_norm) ; %P is the test statistic
      

      【讨论】:

        【解决方案4】:

        只是为了扩展艾伦的答案,知道如何正确使用Pearson's chi-squared test

        设置参数

        N=100; % sample size
        a=0; % lower boundary
        b=1; % higher boundary
        

        在 a 和 b 之间采样 N 个均匀分布的值。如果您想测试代码,请在第二行添加一些 bais 使其不统一。

        x=unifrnd(a,b,N,1);
        %x(x<.9) = rand(sum(x<.9),1);
        

        使用chi2gof

        here 所述,对于chi2gof,您不能使用“假设分布的cdf”,需要指定bin、边缘和预期值。

        nbins = 10; % number of bin
        edges = linspace(a,b,nbins+1); % edges of the bins
        E = N/nbins*ones(nbins,1); % expected value (equal for uniform dist)
        
        [h,p,stats] = chi2gof(x,'Expected',E,'Edges',edges)
        

        使用chi2cdf

        使用此函数,您需要提供卡方检验统计量,$\displaystyle \chi ^{2}$ 可以使用函数histogramm 计算:

        h = histogram(x,edges);
        chi = sum((h.Values - N/nbins).^2 / (N/nbins));
        k = nbins-1; % degree of freedom
        chi2cdf(chi, k)
        

        请注意,如果您不使用边来计算每个 bin 的值的数量,histogramm 将从较低的值到最高的值中选择它们,因此最终得分将不同于 chi2gof

        最后,您想使用 p 值来回答“我可以安全地拒绝原假设吗(即x 不是来自均匀分布)?”。 是的,如果p 低于significant level (alpha),您可以肯定地说x 不是来自均匀分布。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-19
          • 1970-01-01
          • 1970-01-01
          • 2011-07-16
          • 1970-01-01
          • 2011-04-04
          • 2011-09-16
          • 1970-01-01
          相关资源
          最近更新 更多