Удаление выбросов значений

NaN 15

Sum(a)

4 9 2

NaN 7

8 1 6

Отсутствующие значения

Обработка данных

Diff(A)

Конечные разности

0.9599 0.9553 1.0000

0.9331 1.0000 0.9553

1.0000 0.9331 0.9599

 

Очевидно, здесь имеется сильная линейная корреляция между наблюдениями числа машин в трех различных точках, так как результаты довольно близки к единице.

 

MATLAB предоставляет три функции для вычисления конечных разностей.

 

 

Функция Описание
diff Разность между двумя последовательными элементами вектора. Приближенное дифференцирование.
gradient Приближенное вычисление градиента функции.
del2 Пятиточечная аппроксимация Лапласиана.

 

Функция diff вычисляет разность между последовательными элементами числового вектора, то есть diff(X) есть [X(2) -X(1) X(3) -X(2) ... X(n) -X(n-1)]. Так, для вектора A,

 

A = [9 -2 3 0 1 5 4];

 

MATLAB возвращает

ans =

-11 5 -3 1 4 -1

Помимо вычисления первой разности, функция diffявляется полезной для определения опре-деленных характеристик вектора. Например, вы можете использовать diff для определения, является ли вектор монотонным (значения элементов или всегда возрастают или убывают), или имеет ли он равные приращения и т.д. Следующая таблица описывает несколько различ-ных путей использования функции diff с одномерным вектором x.

 

Применение (тест) Описание
diff(x) == 0 Тест на определение повторяющихся элементов
all(diff(x) > 0) Тест на монотонность
all(diff(diff(x)) == 0) Тест на опредедление равных приращений

В данном разделе рассматривается как поступать с:

  • Отсутствующими значениями
  • Выбросами значений или несовместимыми («неуместными») значениями

 

Специальное обозначение NaN, соответствует в MATLAB-е нечисловое значение. В соответ-ствие с принятыми соглашениями NaN является результатом неопределенных выражений та-ких как 0/0. Надлежащее обращение с отсутствующими данными является сложной пробле-мой и зачастую меняется в различных ситуациях. Для целей анализа данных, часто удобно использовать NaN для представления отсутствующих значений или данных которые недос-тупны. MATLAB обращается со значениями NaN единообразным и строгим образом. Эти значения сохраняются в процессе вычислений вплоть до конечных результатов. Любое мате-матическое действие, производимое над значением NaN, в результате также производит NaN. Например, рассмотрим матрицу, содержащую волшебный квадрат размера 3х3, где це-нтральный элемент установлен равным NaN.

 

a = magic(3); a(2,2) = NaN;

a =

 

Вычислим сумму элементов всех столбцов матрицы:

 

ans =

 

Любые математические действия над NaN распространяют NaN вплоть до конечного резуль-тата. Перед проведением любых статистических вычислений вам следует удалить все NaN-ы из имеющихся данных. Вот некоторые возможные пути выполнения данной операции.

 

Программа Описание
i = find( ~ isnan(x)); x = x(i) Найти индексы всех эементов вектора, не равных NaN, и затем сохранить только эти элементы
x = x (find( ~ isnan(x))) Удалить все NaN-ы из вектора
x = x ( ~ isnan(x)); Удалить все NaN-ы из вектора (быстрее).
x (isnan(x)) = [ ]; Удалить все NaN-ы из вектора
X (any(isnan(X’)), :) = [ ]; Удалить все строки матрицы X содержащие NaN-ы

 

Внимание.Для нахождения нечисловых значений NaN вам следует использовать специаль-ную функцию isnan, поскольку при принятом в MATLAB-е соглашении, логическое сравне-ние NaN == NaN всегда выдает 0. Вы не можете использовать запись x(x==NaN) = [ ] для удаления NaN-ов из ваших данных.

 

Если вам часто приходится удалять NaN-ы, воспользуйтесь короткой программой, записан-ной в виде М-файла.

functionX = excise(X)

X(any(isnan(X')),:) = [ ];

Тогда. напечатав

X = excise(X);

вы выполните требуемое действие (excise по английски означает вырезать)

 

 

Вы можете удалить выбросы значений или несовместимые данные при помощи процедур, весьма схожих с удалением NaN-ов. Для нашей транспортной задачи, с матрицей данных count, средние значения и стандартные (среднеквадратические) отклонения каждого столбца матрицы count равны

 

mu = mean(count)

sigma = std(count)

mu =