代码之家  ›  专栏  ›  技术社区  ›  Arnkrishn

在matlab中测试数据分布是否遵循高斯分布

  •  16
  • Arnkrishn  · 技术社区  · 14 年前

    我有一些数据点和它们的平均点。我需要找出那些数据点(具有这个平均值)是否遵循高斯分布。matlab中有没有一个函数可以做这种测试?还是我需要自己写一个测试?

    我试着研究matlab提供的不同的统计函数。我对matlab非常陌生,所以我可能忽略了正确的函数。

    干杯

    3 回复  |  直到 12 年前
        1
  •  15
  •   Amro    12 年前
        2
  •  6
  •   shabbychef    14 年前

    我喜欢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.
    

    每当黑客统计测试时,总是在空值下测试它们!下面是一个简单的例子:

    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
  •  5
  •   Alex Cohen    14 年前

    对于一般测试,也可以在stats工具箱中查找Kolmogorov-Smirnov测试,如下所示: kstest 两个样本版本: kstest2 .你给它你的经验数据,(和数据从一个可能的函数,如高斯等),然后它测试的可能性,你的样本是从正态分布(或一个你为两个样本版本提供的)中提取的…准确的是,它将适用于任何可能的分布…