Несогласованные данные

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

Следующий пример иллюстрирует, как удалить выбросы из трех наборов данных в матрице 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 работает вниз по второму измерению матрицы count - ее столбцам.