在Matlab中测试数据是否来自均值为0且方差未知的正态分布

机器算法验证 假设检验 正态分布 matlab
2022-04-09 03:27:01

问题

我有一个数据向量,我想测试它是否来自均值为零且方差未知的正态分布。你知道这是否有matlab函数或简单的脚本吗?如果您不知道任何特定于 matlab 的内容,那么特定测试的名称和参考就可以了,我将自己实现它。

此外,如果特定测试可以返回置信水平,而不仅仅是在给定的置信水平上回答是 - 否,那么这将是一个好处,但不是必需的。


我已经知道的

如果我想测试我的数据是否来自均值为 0 和方差为 1 的正态分布,那么我可以使用Kolmogorov-Smirnov 测试如果我想要我的数据来自均值和方差未知的正态分布,那么我可以使用Lilliefors 检验Jarque-Bera 检验但是,我想要一个固定的平均值(= 0)和未知的方差。

天真的方法

天真的方法是获取我的数据,计算零附近的方差,然后以此重新规范化我的数据以获得数据集然后我可以对此进行 Kolmogorov-Smirnov 检验。但是,尚不清楚如何证明这一点,特别是因为 KS 检验特别警告不要针对从相同数据估计的参数的分布进行测试(将 D 重新归一化为将与针对均值为零的正态分布进行测试相同,并且方差)。这种天真的方法合理吗?Dσ02DDDσ02

2个回答

您可以使用 Spiegelhalter 的测试(1983 年,而不是 1977 年的“综合测试”):

function pval = spiegel_test(x)
% compute pvalue under null of x normally distributed;
% x should be a vector;
% D. J. Spiegelhalter, 'Diagnostic tests of distributional shape,' 
% Biometrika, 1983
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. if only Matlab had R's pnorm function ... 

我在 null 和一些替代方案下包含代码来测试它:

% under H0:
pvals = nan(10000,1);
for tt=1:numel(pvals);
    pvals(tt) = spiegel_test(randn(300,1));
end
mean(pvals < 0.05)

我得到类似的东西:

ans =

    0.0512

在一些替代方案下:

%under Ha (using a Tukey g-distribution)
g = 0.4;
pvals = nan(10000,1);
for tt=1:numel(pvals);
    pvals(tt) = spiegel_test((exp(g * randn(300,1)) - 1)/g);
end
mean(pvals < 0.05)

%under Ha (using a Tukey h-distribution)
h = 0.1;
pvals = nan(10000,1);
for tt=1:numel(pvals);
    x = randn(300,1);
    pvals(tt) = spiegel_test(x .* exp(0.5 * h * x.^2));
end
mean(pvals < 0.05)

我得到:

ans =

    0.8494


ans =

    0.8959

该测试放弃了平均值必须为零的知识,因此可能不如其他测试强大。Spiegelhalter 指出,对于大于约 25 的样本大小,该测试表现得相当好,并且旨在针对对称替代方案(例如Tukey h 分布)进行测试。它对不对称替代方案的作用较小。

请参阅https://www.mathworks.com/matlabcentral/fileexchange/60147-normality-test-package

这个包自动运行 10 个拟合优度测试:

normalitytest(X)

在此处输入图像描述

确保 X 是一个行向量

这个函数提供了十个正态性测试,这些测试在一个紧凑的例程下作为一个编译的 Matlab 函数并不完全可用。所有测试都经过编码以提供这些正态性测试的 p 值,并且此函数将结果作为输出表提供。包括的测试有:Kolmogorov-Smirnov 测试(限制形式 (KS-Lim)、Stephens 方法 (KS-S)、Marsaglia 方法 (KS-M)、Lilliefors 测试 (KS-L))、Anderson-Darling (AD) 测试、 Cramer-Von Mises (CvM) 测试、Shapiro-Wilk (SW) 测试、Shapiro-Francia (SF) 测试、Jarque-Bera (JB) 测试、D'Agostino 和 Pearson (DAP) 测试。测试不适用于大数据。大多数测试不适用于大于 900 的数据。

相关论文(DOI:10.22237/jmasm/1509496200)可在https://digitalcommons.wayne.edu/jmasm/vol16/iss2/30/找到