2017-06-06 51 views
3

我使用MATLAB中的Kolmogorov-Smirnov測試來確定在執行廣義線性迴歸之前數據矩陣的每列的正態性。示例數據向量是:Kolmogorov-Smirnov在MATLAB中的正態性測試 - 數據規範化?

data = [8126,3163,9129,5399,8682,1126,1053,7805,2989,2758,3277,1152,6994,6833]; 

該測試運行並給了我一個結果。然而,當我繪製經驗累積分佈函數(cdf)(藍色)和標準正態cdf(紅色)進行視覺對比時,這樣的數據向量的尺度是這樣的,使得該圖不是有用的:

exampleCDF

用於繪製此圖中的代碼是:

[h,p,ksstat,cv] = kstest(data); 
[f,x_values] = ecdf(data); 
figure() 
F = plot(x_values,f); 
set(F,'LineWidth',2); 
hold on 
G = plot(x_values,normcdf(x_values,0,1),'r-'); 
set(G,'LineWidth',2); 
legend([F G],... 
    'Empirical CDF','Standard Normal CDF',... 
    'Location','SE'); 

這是否意味着我測試的結果是不是有效?如果是,我可以只是規範化數據

dataN=(data-min(data))./(max(data)-min(data)); 

同時保持測試有效性?

謝謝您的時間,

勞拉

+3

您正在繪製零均值和標準偏差爲1的高斯CDF。因此,對於成千上萬的數據值,CDF非常接近1.您可能需要使用根據您的數據估計的平均值和標準偏差;或規範化的數據,然後你可以保持高斯CDF零均值和單位標準差 –

+0

當然!感謝您的建議Luis - 改變平均值和標準偏差修復了問題 – Laura

+2

隨時!你可能想回答你自己(我不確定你是如何準確地應用mean和std dev)並接受答案,所以問題不會顯示爲未答覆 –

回答

3

感謝路易斯Mendo我解決了這個問題。 normcdf要求數據向量的平均值和標準偏差作爲輸入,我沒有從我正在處理的示例代碼中改變它。編輯的代碼是:

[h,p,ksstat,cv] = kstest(data); 
[f,x_values] = ecdf(data); 
figure() 
F = plot(x_values,f); 
set(F,'LineWidth',2); 
hold on 
variableMean = mean(data); 
variableSD = std(data); 
G = plot(x_values,normcdf(x_values,variableMean,variableSD),'r-'); 
set(G,'LineWidth',2); 
legend([F G],... 
    'Empirical CDF','Standard Normal CDF',... 
    'Location','SE');