我参与了一个项目,我需要检查我的数据对于给定的 N 值是否遵循具有 N 个自由度的 T 分布。
我知道可以使用 Kolmogorov-Smirnoff,但是有没有专门为测试 T 分布而专门定制的测试。如果没有专门针对 T 的任何测试,那么任何适用于对称/单峰分布的测试都会有所帮助。
提前致谢。
我参与了一个项目,我需要检查我的数据对于给定的 N 值是否遵循具有 N 个自由度的 T 分布。
我知道可以使用 Kolmogorov-Smirnoff,但是有没有专门为测试 T 分布而专门定制的测试。如果没有专门针对 T 的任何测试,那么任何适用于对称/单峰分布的测试都会有所帮助。
提前致谢。
这是在分布上运行 KS-test 的方法。
在您的情况下 df 是给定的,因此您可以使用给定的分布,而不是像我在 MATLAB 中的示例中那样估计它('nu' 变量是 df)。
% True T-distribution
true_pd = makedist('tlocationscale','mu',0,'sigma',1,'nu',2);
% plot true distribution
x=0:0.01:1;
plot(icdf(true_pd,x),x);
hold on;
plot(norminv(x),x);
legend({'t' 'normal'},'Location','Best')
title 'CDF'
rng(0)
% obtain a sample
n=100;
sample = random(true_pd,n,1);
subplot(2,1,1)
histfit(sample,20,'normal');
title 'Sample from t(2,1,0) fit with Nromal'
subplot(2,1,2)
qqplot(sample);

% estimate H_0: T-distribution from this sample
disp 'H_0:'
null_pd = fitdist(sample,'tlocationscale')
[~,~,ksstat] = kstest(sample,'CDF',null_pd);
% get KS-test critical values by parametric bootstrapping from estimated
m=999;
r=random(null_pd,n,m);
stats = zeros(m,1); % store test statistics
est_pd = makedist('tlocationscale');
opts = statset(statset('tlsfit'),'MaxIter',1000);
opts = statset(opts,'MaxFun',2000);
for i=1:m
bsample = r(:,i);
[~,~,stats(i)] = kstest(bsample,'CDF',est_pd.fit(bsample,'options',opts));
end
p = (sum(stats>ksstat)+1) / (m+1);
mcErr = sqrt(p*(1-p)/m);
fprintf('KS stat: %f, p-value: %f, Monte Carlo error: %f\n',ksstat, p , mcErr);
% get the empirical distribution of KS test statistics
epd = ProbDistUnivKernel(stats);
% popular critical values
disp 'Crit. values for \alpha= 0.1, 0.05 and 0.01'
icdf(epd,[ 0.9 0.95 0.99])
figure
plot(icdf(epd,x),x)
grid on
title 'KS-test statistics simulated distribution'

输出:
H_0:
null_pd =
tLocationScaleDistribution
t Location-Scale distribution
mu = 0.161093 [-0.117585, 0.439771]
sigma = 1.06958 [0.799248, 1.43136]
nu = 1.58744 [1.02505, 2.45837]
KS stat: 0.041646, p-value: 0.865000, Monte Carlo error: 0.010812
Crit. values for \alpha= 0.1, 0.05 and 0.01
ans =
0.0720 0.0791 0.0931
在这种情况下,基于值,我们不能拒绝样本来自 t 分布。
您可以在此处将临界值与标准临界值进行比较。您可以用标准正态分布替换我定义和估计
如果你不喜欢我的方法,你可以关注这篇论文,它详细描述了自举:Jogesh Babu, G. 和 CR Rao。“估计参数时的拟合优度检验。” Sankhya:印度统计杂志 66(2004 年):63-74。
如果您想了解@Glen_b 在说必须知道分布而不是估计分布时所说的内容,请参阅NIST 手册中的第3 项。
如果您的样本是正态的并且您必须估计 df,这不是一个非常强大的测试。在小样本量中很难区分正态分布和分布,因为当 df N分布会收敛到正态分布。在您的情况下,给出了 N,因此测试应该可以正常工作。
除非您在查看数据之前预先指定了均值和方差,否则直接 Kolmogorov-Smirnov 检验不适合 - 事实上,一旦您估计参数,它就不再是无分布的。
您的 p 值将是完全错误的 - 您的实际显着性水平将远低于您的名义比率,并且功率将相应地低。
如果要进行类似 Kolmogorov-Smirnov 的检验,则需要 Lilliefors 检验的 t 分布版本(本质上是具有拟合参数的 KS 检验)。
根据观察值之间的平方相关性和分布的近似预期阶数统计数据,使用 Shapiro-Francia 类型检验的改编版本可能会做得更好。这将直接对应于合适的 QQ 图中的相关性。
对于上述任一测试,都可以模拟零下的分布。
如果样本量不小,另一种选择是 Anderson-Darling 检验。它与 KS 有同样的问题,但随着样本量的增加,影响似乎下降得相对较快。请参阅 D'Agostino 和 Stephens “拟合优度技术”中的讨论
[如果您有一个特定的替代方案,(其中可能是一种特殊情况,例如使用不同的 df 对 at 进行测试),您可能能够进行似然比统计。]
也有单峰性和对称性的测试。