Функция clusterboot с пользовательским интерфейсом diana не распознает матрицу различий - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь применить функцию clusterboot в r с помощью функции кластеризации интерфейса, которой нет в текущем списке, поэтому мне нужно написать ее самостоятельно.Это не кажется сложным, но я не могу заставить его работать

Я пытаюсь выполнить кластерный анализ 2226 элементов на основе набора из 31 переменной.Переменные состоят из числовых и категориальных данных, поэтому я вычисляю расстояния с помощью метода gower (функция ромашки в пакете кластера).Кроме того, я решил использовать метод кластеризации diana (разделяющая иерархическая кластеризация), потому что он наиболее подходит для моих целей.Код отлично работает на данный момент.Но я хочу выполнить кластеризацию несколько раз, чтобы убедиться, что выходные данные согласованы, для чего я хочу использовать метод clusterboot, и вот где он перестает работать.

Метод Дианы отсутствует в списке функций кластеризации интерфейса функции clusterboot, поэтому мне нужно написать его самому.Я следую инструкциям в справке по загрузке кластера, и это не кажется сложным, но я не могу заставить его работать.Не могли бы вы дать мне подсказку?Ниже я копирую вывод консоли:

GOWERdist<-daisy(model_vars[-1], metric="gower") 
class(GOWERdist)
#[1] "dissimilarity" "dist"   

DianaClust <- diana(GOWERdist, diss=TRUE, stop.at.k =16 )
str(DianaClust)
#List of 6
# $ order : int [1:2226] 1 4 2 7 49 5 14 23 6 36 ...
# $ height: num [1:2225] 0.0674 0.1782 0.0229 0.0641 0.0859 ...
# $ dc    : num 0.918
# $ merge : int [1:2225, 1:2] -1178 -596 -1347 -241 -224 -306 -1686 -1527 -695 -69 ...
# $ diss  : NULL
# $ call  : language diana(x = dist, diss = TRUE, stop.at.k = 16)
# - attr(*, "class")= chr [1:2] "diana" "twins"

# clustering
cboot.diana <- clusterboot(GOWERdist, clustermethod= cluster::diana, diss=TRUE, stop.at.k =16)
#Error in matrix(0, nrow = c1$nc, ncol = B) : non-numeric matrix extent
#In addition: Warning messages:
#1: In if (distances & showplots & datatomatrix) dpoints <- cmdscale(data) :
#  the condition has length > 1 and only the first element will be used
#2: In if (datatomatrix & !distances) { :
#  the condition has length > 1 and only the first element will be used
#3: In if (distances) c1 <- clustermethod(as.dist(data), ...) else c1 <- #clustermethod(data,  :
#  the condition has length > 1 and only the first element will be used
...