Кластеризация с значениями NA в R
Я был удивлен, узнав, что clara
из library(cluster)
допускает NA. Но функциональная документация ничего не говорит о том, как она обрабатывает эти значения.
Итак, мои вопросы:
- Как
clara
обрабатывает NA?
- Можно ли это как-то использовать для
kmeans
(не разрешено)?
[Обновить] Итак, я нашел строки кода в clara
:
inax <- is.na(x)
valmisdat <- 1.1 * max(abs(range(x, na.rm = TRUE)))
x[inax] <- valmisdat
которые заменяют отсутствие значения на valmisdat
. Не уверен, что я понимаю причину использования такой формулы. Есть идеи? Было бы более "естественным" рассматривать НС по каждому столбцу отдельно, возможно, заменяя средним/медианным?
Ответы
Ответ 1
Хотя явным образом не указано, я считаю, что NA
обрабатываются способом, описанным на странице справки ?daisy
. В разделе "Сведения":
В алгоритме маргаритки отсутствующие значения в строке x не включаются в различия с этой строкой.
Учитывая внутренне тот же код будет использоваться clara()
, как я понимаю, что NA
в данных может обрабатываться - они просто не участвуют в вычислении. Это достаточно стандартный способ продолжения в таких случаях и, например, используется в определении обобщенного коэффициента подобия Гаувера.
Обновление Источники C
для clara.c
ясно указывают, что это (выше), как NA
обрабатывается clara()
(строки 350-356 в ./src/clara.c
):
if (has_NA && jtmd[j] < 0) { /* x[,j] has some Missing (NA) */
/* in the following line (Fortran!), x[-2] ==> seg.fault
{BDR to R-core, Sat, 3 Aug 2002} */
if (x[lj] == valmd[j] || x[kj] == valmd[j]) {
continue /* next j */;
}
}
Ответ 2
Не уверен, что kmeans
может обрабатывать отсутствующие данные, игнорируя недостающие значения в строке.
В kmeans
есть два шага;
- вычисление расстояния между наблюдением и исходным средним кластером.
- обновление нового значения кластера на основе недавно вычисленных расстояний.
Когда у нас отсутствуют данные в наших наблюдениях:
Шаг 1 можно обработать, отрегулировав метрику расстояния соответствующим образом, как в пакете clara/pam/daisy
. Но шаг 2 может быть выполнен только в том случае, если у нас есть какое-то значение для каждого столбца наблюдения. Поэтому вменение может быть следующим лучшим вариантом для kmeans
для обработки отсутствующих данных.
Ответ 3
Посмотрев на код Clara c, я заметил, что в алгоритме clara, когда в наблюдениях отсутствуют значения, сумма квадратов "уменьшается" пропорционально числу отсутствующих значений, что, я думаю, неверно! строка 646 clara.c похожа на "dsum * = (nobs/pp)", которая показывает, что подсчитывает количество не пропущенных значений в каждом пара наблюдений (nobs), делит ее на число переменных (pp) и умножает на сумму квадратов. Я думаю, это должно быть сделано иначе, то есть "dsum * = (pp/nobs)".