在 MATLAB 中测试数据分布是不是遵循高斯分布

Posted

技术标签:

【中文标题】在 MATLAB 中测试数据分布是不是遵循高斯分布【英文标题】:Test if a data distribution follows a Gaussian distribution in MATLAB在 MATLAB 中测试数据分布是否遵循高斯分布 【发布时间】:2010-12-25 08:57:02 【问题描述】:

我有一些数据点及其平均点。我需要找出这些数据点(具有该平均值)是否遵循高斯分布。 MATLAB中是否有可以进行这种测试的函数?还是我需要自己写一个测试?

我尝试查看 MATLAB 提供的不同统计函数。我对 MATLAB 很陌生,所以我可能忽略了正确的功能。

干杯

【问题讨论】:

【参考方案1】:

对于一般测试,请在 Stats Toolbox 中查找 Kolmogorov-Smirnov 测试,如 kstest 和两个样本版本:kstest2。您将经验数据(以及来自可能函数的数据,如高斯等)提供给它,然后它会测试您的样本从正态分布(或您为两个样本提供的分布)中提取的可能性版本)...好处是它适用于任何可能的发行版...

【讨论】:

【参考方案2】:

我喜欢 Spiegelhalter 的测试(D. J. Spiegelhalter,“分布形状的诊断测试”,Biometrika,1983 年):

function pval = spiegel_test(x)
% compute pvalue under null of x normally distributed;
% x should be a vector;
xm = mean(x);
xs = std(x);
xz = (x - xm) ./ xs;
xz2 = xz.^2;
N = sum(xz2 .* log(xz2));
n = numel(x);
ts = (N - 0.73 * n) / (0.8969 * sqrt(n)); %under the null, ts ~ N(0,1)
pval = 1 - abs(erf(ts / sqrt(2)));    %2-sided test.

每当破解统计测试时,总是在 null 下测试它们!这是一个简单的例子:

pvals = nan(10000,1);
for j=1:numel(pvals);
pvals(j) = spiegel_test(randn(300,1));
end
nnz(pvals < 0.05) ./ numel(pvals)

我得到了结果:

ans =    
   0.0505

同样

nnz(pvals > 0.95) ./ numel(pvals)

我明白了

ans = 
   0.0475

【讨论】:

【参考方案3】:

在所有available hypothesis tests 上检查此documentation page。

根据您的目的,您可以使用:

Chi-square goodness-of-fit test Lilliefors test z-test t-test Kolmogorov-Smirnov test

...等等

您还可以使用一些视觉测试,例如:

hist normplot cdfplot

【讨论】:

我只是不喜欢这些都来自 Mathwork$ $tatistic$ 工具箱;一个人可以轻松地将例如没有它的 Jarque-Bera,但对于其余部分,您必须从 octave 导入一些文件。统计测试的另一个问题是没有迹象表明它们中的每一个的相对力量(真的,这取决于备择假设)。 是的,***链接会更好。它们通常更切中要害,阅读起来也更快。

以上是关于在 MATLAB 中测试数据分布是不是遵循高斯分布的主要内容,如果未能解决你的问题,请参考以下文章

如何使用混合高斯模型获得可能性

matlab中各种高斯相关函数

matlab高斯拟合的初始值问题

matlab如何产生服从高斯分布的随机整数

MATLAB | 如何绘制高斯混合分布分类区域及边界

MATLAB | 如何绘制高斯混合分布分类区域及边界