Kolmogorov-Smirnov 测试 MATLAB 中的正态性 - 数据归一化?
Posted
技术标签:
【中文标题】Kolmogorov-Smirnov 测试 MATLAB 中的正态性 - 数据归一化?【英文标题】:Kolmogorov-Smirnov test for normality in MATLAB - data normalisation? 【发布时间】:2017-11-07 09:32:15 【问题描述】:在执行广义线性回归之前,我在 MATLAB 中使用 Kolmogorov-Smirnov 检验来确定数据矩阵的每一列的正态性。一个示例数据向量是:
data = [8126,3163,9129,5399,8682,1126,1053,7805,2989,2758,3277,1152,6994,6833];
测试运行并给我一个结果。但是,当我绘制经验累积分布函数 (cdf)(蓝色)和标准正态 cdf(红色)进行视觉比较时,这样的数据向量的比例使得该图没有用处:
用于绘制此图的代码是:
[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));
同时保持测试有效性?
感谢您的宝贵时间,
劳拉
【问题讨论】:
您正在绘制具有零均值和标准差1
的高斯 CDF。因此,对于数千个 CDF 的数据值,它非常接近 1。您可能需要使用从数据中估计的平均值和标准偏差;或标准化数据,然后你可以保持零均值和单位标准差的高斯 CDF
当然!感谢您的建议 Luis - 更改均值和标准差解决了问题
随时!您可能想回答自己(我不确定您如何准确应用均值和标准差)并接受答案,这样问题就不会显示为未回答
【参考方案1】:
感谢 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');
【讨论】:
以上是关于Kolmogorov-Smirnov 测试 MATLAB 中的正态性 - 数据归一化?的主要内容,如果未能解决你的问题,请参考以下文章
LCG 在 Kolmogorov-Smirnov 测试中是不是像我的代码所暗示的那样严重失败?
Python Kolmogorov-Smirnov (KS) 测试结果不一致
在 Matlab 中执行不善的两样本 Kolmogorov-Smirnov 测试(kstest2)?