MATLAB中的Kolmogorov-Smirnov正态性检验 - 数据归一化?

3

我正在使用MATLAB中的Kolmogorov-Smirnov测试来确定数据矩阵每列的正态性,以便在执行广义线性回归之前进行检测。以下是一个示例数据向量:

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)); 

在保持测试有效性的同时?

感谢您的时间,

Laura


3
您正在绘制均值为零、标准差为 1 的高斯累积分布函数图。因此,对于数值级别在千位数的数据,该累积分布函数非常接近于 1。您可能需要使用从数据中估算得出的均值和标准差;或者对数据进行归一化处理,然后可以保持均值为零、标准差为一的高斯累积分布函数。 - Luis Mendo
当然!谢谢你的建议,路易斯 - 改变均值和标准差解决了问题。 - Laura
2
随时可以!您可能想自己回答(我不确定您如何精确地应用平均值和标准偏差),并接受答案,以便问题不会显示为未回答。 - Luis Mendo
1个回答

3

感谢Luis 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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接