2

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

4

4 回答 4

6

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

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

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

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

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

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

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

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

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

在哪里

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

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

于 2012-10-21T10:30:01.793 回答
1

将您的变量转换为正态分布变量并使用“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
于 2015-04-26T22:10:26.110 回答
1

根据 Colin 的回答,可以使用Pearson 卡方检验来计算均匀分布的拟合优度。

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

于 2013-04-03T22:07:15.083 回答
0

只是为了扩展 Alan 的答案,了解如何正确使用Pearson 的卡方检验

设置参数

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

如此处所述,使用chi2gof,您不能使用“假设分布的 cdf”,需要指定箱、边缘和预期值。

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)

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

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

于 2016-06-09T09:10:08.787 回答