您可以使用 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 分布)进行测试。它对不对称替代方案的作用较小。