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

Kolmogorov-Smirnov 检验中的假设检验 - 无论是临界值还是 p 值

KS(Kolmogorov-Smirnov)(转)

R语言Kolmogorov-Smirnov假设检验(正态性检验):检验数据的正态性