Hypothesis-Testing

測試數據是否遵循 T 分佈

  • December 4, 2014

我參與了一個項目,我需要檢查我的數據對於給定的 N 值是否遵循具有 N 個自由度的 T 分佈。

我知道可以使用 Kolmogorov-Smirnoff,但是有沒有專門為測試 T 分佈而專門定制的測試。如果沒有專門針對 T 的任何測試,那麼任何適用於對稱/單峰分佈的測試都會有所幫助。

提前致謝。

這是運行 KS-test 的方法-分配。

  1. 假設您有一個您懷疑來自的樣本-分佈,大小 =
  2. 從樣本中估計 t 分佈參數。
  3. 產生大小樣本從估計分佈。
  4. 對於每個樣本,使用估計的分佈作為理論獲得 KS 統計量
  5. 從獲得的統計數據構建經驗非參數分佈,例如使用核密度估計器
  6. 獲取原始樣本和估計分佈的 KS 統計量
  7. 獲得- KS-stat 的值,使用統計的經驗分佈
  8. 根據置信水平做出決定

在你的情況下 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,因此測試應該可以正常工作。

引用自:https://stats.stackexchange.com/questions/126539

comments powered by Disqus