knnimpute

Вписать отсутствующие данные с помощью метода ближайшего соседа

Описание

пример

imputedData = knnimpute(data) возвращает imputedData после замены NaNs в вход data с соответствующим значением из столбца с ближайшим соседом. Если соответствующее значение из столбца с ближайшим соседом также NaNиспользуется следующий ближайший столбец. Функция вычисляет евклидово расстояние между столбцами наблюдений, используя только строки без NaN значения. Таким образом, данные должны иметь по крайней мере одну строку, которая не содержит NaN.

пример

imputedData = knnimpute(data,k) заменяет NaNs в Data с взвешенным средним значением k столбцы с ближайшими соседями. Веса обратно пропорциональны расстояниям от соседних столбцов.

пример

imputedData = knnimpute(data,k,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, imputedData = knnimpute(data,k,'Distance','mahalanobis') использует расстояние Махаланобиса, чтобы вычислить ближайшие соседние столбцы.

Примеры

свернуть все

Функция knnimpute заменяет NaNs во входных данных на соответствующее значение из столбца с ближайшим соседом. Рассмотрим следующую матрицу.

A = [1 2 5;4 5 7;NaN -1 8;7 6 0]
A = 4×3

     1     2     5
     4     5     7
   NaN    -1     8
     7     6     0

A (3,1) является NaN, и поскольку столбец 2 является ближайшим столбцом к столбцу 1 на евклидовом расстоянии, knnimpute заменяет (3,1) запись столбца 1 соответствующей записью из столбца 2, которая равна -1.

results = knnimpute(A)
results = 4×3

     1     2     5
     4     5     7
    -1    -1     8
     7     6     0

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

B = [NaN 2 1; 3 NaN 1; 1 8 NaN]
B = 3×3

   NaN     2     1
     3   NaN     1
     1     8   NaN

B(4,:) = ones(1,3)
B = 4×3

   NaN     2     1
     3   NaN     1
     1     8   NaN
     1     1     1

imputed = knnimpute(B)
imputed = 4×3

    1.5000    2.0000    1.0000
    3.0000    2.0000    1.0000
    1.0000    8.0000    4.5000
    1.0000    1.0000    1.0000

Затем можно удалить добавленную строку.

imputed(4,:) = []
imputed = 3×3

    1.5000    2.0000    1.0000
    3.0000    2.0000    1.0000
    1.0000    8.0000    4.5000

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

load yeastdata

Удалите данные для пустых пятен, где метки генов установлены на 'EMPTY'.

emptySpots = strcmp('EMPTY',genes);
yeastvalues(emptySpots,:) = [];

knnimpute использует следующий ближайший столбец, если соответствующее значение из столбца ближайшего соседа также является NaN. Однако, если все столбцы являются NaNs, функция генерирует предупреждение для каждой строки и сохраняет строки вместо удаления всей строки в возвращенном выходе. Эти выборочные данные содержат несколько строк со всеми NaNs. Удалите эти строки, чтобы избежать предупреждений.

yeastvalues(~any(~isnan(yeastvalues),2),:) = [];

Вписать отсутствующие значения.

imputedData1 = knnimpute(yeastvalues);

Проверьте, остается ли NaN после ввода данных.

sum(any(isnan(imputedData1),2))
ans = 0

Используйте поиск по 5 ближайшему соседу, чтобы получить ближайший столбец.

imputedData2 = knnimpute(yeastvalues,5);

Измените метрику расстояния, чтобы использовать расстояние Минковски.

imputedData3 = knnimpute(yeastvalues,5,'Distance','minkowski');

Можно также задать параметр для метрики расстояния. Для образца задайте другую экспоненту (например, 5) для расстояния Минкновского.

imputedData4 = knnimpute(yeastvalues,5,'Distance','minkowski','DistArgs',5);

Входные параметры

свернуть все

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

Типы данных: double

Количество ближайших соседей, заданное как положительное целое число.

Типы данных: double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: imputedData = knnimpute(data,k,'Distance','mahalanobis')

Метрика расстояния, заданная как вектор символов, строка или указатель на функцию, как описано в следующей таблице.

Используйте 'DistArgs' Пара "имя-значение" в сочетании, чтобы задать параметры для функции расстояния. Например, чтобы задать другую экспоненту (например, 5) для расстояния Минкновского, используйте: output = knnimpute(data,3,'Distance','minkowski','DistArgs',5).

ЗначениеОписание
'euclidean'

Евклидово расстояние (по умолчанию).

'squaredeuclidean'

Квадратное Евклидово расстояние. (Эта опция предусмотрена только для эффективности. Это не удовлетворяет неравенству треугольника.)

'seuclidean'

Стандартизированное евклидово расстояние. Каждое различие координат между наблюдениями масштабируется путем деления на соответствующий элемент стандартного отклонения, S = nanstd(X). Использование 'DistArgs' чтобы задать другое значение для S.

'mahalanobis'

Расстояние Махаланобиса с помощью выборочной ковариации X, C = nancov(X). Использование 'DistArgs' чтобы задать другое значение для C, где матрица C симметричен и положительно определен.

'cityblock'

Расстояние между блоками.

'minkowski'

Расстояние Минковского. Экспонента по умолчанию является 2. Использование DistParameter чтобы задать другую экспоненту P, где P - положительная скалярная величина значение экспоненты.

'chebychev'

Расстояние Чебычева (максимальное различие координат).

'cosine'

Один минус косинус включенного угла между точками (рассматривается как векторы).

'correlation'

Один минус корреляция выборки между точками (рассматривается как последовательности значений).

'hamming'

Расстояние Хемминга, которое является процентом различий координат.

'jaccard'

Один минус коэффициент Жаккара, который является процентом ненулевых координат, которые различаются.

'spearman'

Один минус выборки корреляции ранга Спирмана между наблюдениями (рассматриваются как последовательности значений).

distfun

Пользовательский указатель на функцию расстояния. Функция расстояния имеет вид

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
где

  • ZI является 1-by- n вектор, содержащий одно наблюдение.

  • ZJ является m2-by- n матрица, содержащая несколько наблюдений. distfun необходимо принять матрицу ZJ с произвольным количеством наблюдений.

  • D2 является m2-by- 1 вектор расстояний, и D2(k) - расстояние между наблюдениями ZI и ZJ(k,:).

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

Посмотрите pdist для получения дополнительной информации.

Пример: 'Distance','cosine'

Типы данных: char | string | function_handle

Значения параметров метрики расстояния, заданные как положительная скалярная величина или массив ячеек значений. Использование 'DistArgs' совместно с 'Distance' чтобы задать параметры для функции расстояния. Например, чтобы задать другую экспоненту (например, 5) для расстояния Минкновского, используйте: output = knnimpute(data,3,'Distance','minkowski','DistArgs',5)

Пример: 'DistArgs',3

Типы данных: double | cell

Веса, используемые в взвешенном среднем вычислении, заданные как числовой вектор длины k.

Пример: 'Weights',[0.3 0.5 0.2]

Типы данных: double

Флаг для использования медианы k ближайшие соседи вместо взвешенного среднего, заданные как true или false.

Пример: 'Median',true

Типы данных: logical

Выходные аргументы

свернуть все

Результаты после замены NaNs из входа data с соответствующим значением из столбца с ближайшим соседом, возвращенным в виде числовой матрицы.

Ссылки

[1] Скорость, Т. (2003). Статистический анализ данных микромассивов экспрессии генов (Chapman & Hall/CRC).

[2] Hastie, T., Tibshirani, R., Sherlock, G., Eisen, M., Brown, P., and Botstein, D. (1999). «Ввод недостающих данных для массивов экспрессии генов», Технический отчет, Деление биостатистики, Стэнфордский университет.

[3] Троянская, О., Кантор, М., Шерлок, Г., Браун, П., Хасти, Т., Тибширани, Р., Ботштейн, Д., и Альтман, Р. (2001). Отсутствующее значение методы оценки для ДНК микромассивов. Биоинформатика 17 (6), 520-525.

См. также

| | |

Представлено до R2006a