Кластерный анализ с ромашкой
Я пытаюсь выполнить иерархический кластерный анализ с помощью RStudio, используя пакет daisy
, Это мой набор данных:
data.frame':341 obs. of 28 variables:
$ Impo_Env : Ord.factor w/ 3 levels "Low"<"Med"<"High": 3 2 3 2 3 2 3 3 2 3 ...
$ ComparativePriority_IAS: Ord.factor w/ 3 levels "Low"<"Med"<"High": 3 1 3 2 3 2 3 2 3 2 ...
$ Strategy_Eradication: Ord.factor w/ 3 levels "No intervention"<..: 3 2 3 2 3 2 3 2 2 3 ...
$ Knowl_BiodivLoss: Factor w/ 2 levels "0","1": 2 1 2 2 2 1 2 2 2 2 ...
$ Control_Trade: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ Engagement_Retail: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ Knowl_PastProj: Factor w/ 2 levels "0","1": 1 1 1 1 2 1 1 1 2 1 ...
$ Priority_IAS: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ Knowl_Eradic: Factor w/ 2 levels "0","1": 2 1 2 1 2 2 1 2 2 1 ...
$ Alert_CFS: Factor w/ 2 levels "0","1": 1 2 1 2 1 2 2 1 2 1 ...
$ Alert_Municipality: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ Alert_Park: Factor w/ 2 levels "0","1": 2 1 2 1 2 1 1 2 1 1 ...
$ Alert_Police: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ Alert_Firemen: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 2 ...
$ Supp_AuthorityIAS: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ Knowl_Env: Factor w/ 2 levels "0","1": 2 1 2 2 2 2 2 2 2 2 ...
$ Info_Tv: Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 1 2 1 ...
$ Info_Web: Factor w/ 2 levels "0","1": 2 1 2 2 2 1 2 1 2 2 ...
$ Info_Radio: Factor w/ 2 levels "0","1": 1 1 1 1 1 2 1 2 1 1 ...
$ Info_Magazines: Factor w/ 2 levels "0","1": 1 1 2 1 2 1 1 2 1 1 ...
$ Info_School: Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 1 2 ...
$ Blacklist: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ Workshop: Factor w/ 2 levels "0","1": 1 1 2 1 2 1 2 2 1 1 ...
$ SuppFin_FutProj: Factor w/ 2 levels "0","1": 2 1 2 1 2 2 2 2 2 2 ...
$ Tourist_dummy: Factor w/ 2 levels "0","1": 1 1 1 2 2 1 1 1 2 1 ...
$ Gender: Factor w/ 2 levels "Female","Male": 1 2 1 2 1 1 2 2 2 1 ...
$ logIASknown: num 2.89 2.94 2.89 2.56 3.14 ...
$ Age: int 20 41 14 10 26 33 19 59 23 16 ...
Я хотел бы использовать евклидово расстояние с daisy
Однако, когда я бегу
daisy(fuu, metric = c("euclidean"), type=list(ordratio = c(1,2,3), asymm=c(4:24), symm=c(25,26)))
Выход не в порядке. Расстояние Гауэра используется вместо евклидова расстояния:
Предупреждение: в маргаритке (fuu, metric = c("евклидово"), type = list(ordratio = c(1,: со смешанными переменными, метрика "gower" используется автоматически)
Как я могу это исправить?
1 ответ
Как описано в разделе "Подробности" документации по функции daisy, содержащейся в пакете кластера:
Обработка номинальных, порядковых и (а) симметричных двоичных данных достигается с помощью общего коэффициента разности Гауэра (1971). Если x содержит какие-либо столбцы этих типов данных, метрика аргументов и подставка будут игнорироваться, и в качестве метрики будет использоваться коэффициент Гауэра.
Другими словами, для вычисления евклидовой метрики (расстояния как корневая сумма квадратов разностей) входные столбцы должны быть числовыми (модовыми) переменными (т. Е. Все столбцы, когда x является матрицей) и, таким образом, распознаваться как переменные, масштабированные по интервалу, в отличие от номинальных (столбцы класса класса) переменных или порядковых (столбцы класса упорядочены) переменных. Указание типа переменной в аргументе типа не меняет этот факт.
В этих условиях, и предположим, что это имеет смысл для всех ваших 28 переменных, несмотря на то, что некоторые из них являются качественными двоичными данными, вы можете попытаться преобразовать их с помощью as.numeric
и продолжайте тогда, причина в том, что при смешанных переменных автоматически используются переопределения метрики "gower".