本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

不一致的数据

当您检查数据绘图时,您可能会发现有些点显著偏离了其他数据。在某些情况下,可合理地将这些点视为离群值,即与其余数据不一致的数据值。

以下示例说明如何从 24×3 矩阵 count 中的三个数据集中移除离群值。在本例中,离群值定义为偏离均值超过三倍标准差的值。

小心

除非您确信了解要更正的问题的根源,否则请谨慎对待数据更改。去除离群值对标准差的影响大于对数据均值的影响。删除一个离群值点会导致新标准差变小,从而可能导致其余一些点似乎又成为离群值!

% Import the sample data
load count.dat;
% Calculate the mean and the standard deviation
% of each data column in the matrix
mu = mean(count)
sigma = std(count)

命令行窗口显示

mu =
       32.0000   46.5417   65.5833

sigma =
       25.3703   41.4057   68.0281

将偏离均值三倍标准差以上的值视为离群值时,请使用以下语法确定 count 矩阵的每列中的离群值数量:

[n,p] = size(count);
% Create a matrix of mean values by
% replicating the mu vector for n rows
MeanMat = repmat(mu,n,1);
% Create a matrix of standard deviation values by
% replicating the sigma vector for n rows
SigmaMat = repmat(sigma,n,1);
% Create a matrix of zeros and ones, where ones indicate
% the location of outliers
outliers = abs(count - MeanMat) > 3*SigmaMat;
% Calculate the number of outliers in each column
nout = sum(outliers) 

该过程返回每列中的离群值数量,如下:

nout =
       1    0    0

count 的第一个数据列中有一个离群值,其他两列中都没有。

要删除包含该离群值的整行数据,请键入

count(any(outliers,2),:) = [];

此处,当 outliers 向量中有任何非零元素时,any(outliers,2) 返回 1。参数 2 指定 any 继续处理 count 矩阵的第二个维度 - 列。