Противоречивые данные

Когда вы исследуете график данных, вы можете найти, что некоторые точки, кажется, отличаются существенно от остальной части данных. В некоторых случаях разумно рассмотреть такие выбросы точек или значения данных, которые, кажется, противоречивы с остальной частью данных.

Следующий пример иллюстрирует, как удалить выбросы из трех наборов данных в 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),:) = [];

Здесь, any(outliers,2) возвращает 1, когда любой из элементов в векторе outliers является ненулевым. Аргумент 2 указывает, что any работает вниз второе измерение матрицы количества — ее столбцы.

Была ли эта тема полезной?