Hypothesis-Testing
測試數據是否遵循 T 分佈
我參與了一個項目,我需要檢查我的數據對於給定的 N 值是否遵循具有 N 個自由度的 T 分佈。
我知道可以使用 Kolmogorov-Smirnoff,但是有沒有專門為測試 T 分佈而專門定制的測試。如果沒有專門針對 T 的任何測試,那麼任何適用於對稱/單峰分佈的測試都會有所幫助。
提前致謝。
這是運行 KS-test 的方法-分配。
- 假設您有一個您懷疑來自的樣本-分佈,大小 =
- 從樣本中估計 t 分佈參數。
- 產生大小樣本從估計分佈。
- 對於每個樣本,使用估計的分佈作為理論獲得 KS 統計量
- 從獲得的統計數據構建經驗非參數分佈,例如使用核密度估計器
- 獲取原始樣本和估計分佈的 KS 統計量
- 獲得- KS-stat 的值,使用統計的經驗分佈
- 根據置信水平做出決定
在你的情況下 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,因此測試應該可以正常工作。