2017-06-06 44 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');