кластеризовать одномерные данные с помощью pvclust

Спасибо, что нашли время прочитать этот вопрос. У меня есть одномерные данные для кластеризации в R. Базовая команда hclust работает нормально. Но команда pvclust, тем не менее, не берет одномерных данных и все время говорит:

Error in hclust(distance, method = method.hclust) : 
  must have n >= 2 objects to cluster

Я нашел обходной путь: я добавил к данным несколько нулевых строк. Итак, данные становятся:

       [,1]   [,2]   [,3]  [,4]  [,5]   [,6]   [,7]   [,8]   [,9]  [,10]
[1,]  7.424 14.251 15.957 1.542 2.451 20.836 13.534 20.003 12.555 10.817
[2,]      0      0      0     0     0      0      0      0      0      0
[3,]      0      0      0     0     0      0      0      0      0      0
[4,]      0      0      0     0     0      0      0      0      0      0

Затем я запустил pvclust, и это сработало!

Но я обеспокоен тем, что этот обходной путь испортит математику, лежащую в основе pvclust. Может ли кто-нибудь сказать мне, прав ли я/неправ, и есть ли лучшее решение моего вопроса?

Спасибо!


person Qiyun    schedule 20.05.2013    source источник


Ответы (1)


Прежде всего, позвольте мне заявить, что ни один из этих методов не предназначен для одномерных данных.

Для одномерных данных используйте метод, использующий возможность сортировки данных. Например, используйте метод, основанный на оценке плотности ядра.

Термин «кластерный анализ» обычно используется только для многомерных данных. В одном измерении есть гораздо лучшие методы. См. Также «оптимизация естественных разрывов», но ИМХО вы должны использовать оценку плотности ядра: разделите данные на локальные минимумы в KDE.

Теперь к вашему актуальному вопросу. Скорее всего проблема в том, что вы... передаете 1-мерные данные. Что интерпретируется как одна запись с d измерениями, и поэтому метод жалуется на наличие только одной выборки. Вы можете добиться успеха, если сначала транспонируете свою запись.

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

Но, в конце концов, вы все равно не должны использовать здесь эти методы! Используйте метод, который использует возможность сортировки ваших данных.

person Erich Schubert    schedule 21.05.2013
comment
Спасибо за ваш ответ! Это имеет смысл для меня! - person Qiyun; 21.05.2013
comment
Кстати, вы тоже знаете ответ на этот вопрос: предположим, я использовал оценку плотности ядра и сделал разрез по локальным минимумам. Тогда я могу проверить, насколько левый пик отделен от правого пика? Спасибо! - person Qiyun; 21.05.2013
comment
Я мало использую KDE - я работаю только с многомерными данными. Поэтому я не знаю ссылок на подходящие тесты значимости. Вам нужно рассмотреть, какова ваша Гипотеза: равномерное распределение? Тогда вы, вероятно, могли бы использовать тестирование K-S. Если у вас возникнут такие вопросы, загляните на дочерний сайт stats.stackexchange.com, он намного больше подходит для вопросов по статистике. - person Erich Schubert; 21.05.2013