#r #plot #cluster-analysis
#r #построить #кластерный анализ
Вопрос:
Я использую dtwclust
пакет для кластеризации фрейма данных, содержащего многомерные данные временных рядов. После кластеризации этих данных я хотел бы создать график, представляющий наблюдения в $ k $ группах в соответствии с кластером, а не данными временных рядов!
dtw_cluster2 = tsclust(sample_data, type="partitional",k=6,preproc = zscore,distance="dtw_basic",centroid = "pam",trace=T)
затем построить,
plot(dtw_cluster2)
Мне не нужны эти графики! Мне нужен кластер наблюдений. Я попытался извлечь кластеры из tsclust()
as dtw_cluster2$cluster
, но получил сообщение об ошибке "$ operator not defined for this S4 class"
.
Мой набор данных выглядит следующим образом
V1 V2 V3 V4 V5 V6 V7
1 0 0.1182197 0.09057301 0.08089888 0.003350084 0.00000000 0.00000000
2 0 0.1276078 0.09242144 0.01348315 0.060301508 0.02245599 0.02298152
3 0 0.1369958 0.12569316 0.03595506 0.159128978 0.04491198 0.04596305
4 0 0.1029207 0.10166359 0.08089888 0.201005025 0.06736798 0.06894457
5 0 0.1585535 0.14510166 0.08089888 0.112227806 0.08982397 0.09192609
6 0 0.1488178 0.00000000 0.07415730 0.212730318 0.11227996 0.11490761
Редактировать
Я хочу построить наблюдения в соответствии с кластерами примерно так: «зная, что я использую dtw
расстояние»:
Ответ №1:
Глядя на результат, вы можете видеть это:
str(dtw_cluster2)
Formal class 'PartitionalTSClusters' [package "dtwclust"] with 20 slots
#.. (NB here there are things I've skipped )
..@ distance : chr "dtw_basic"
..@ centroid : chr "pam"
..@ preproc : chr "zscore"
..@ k : int 2
..@ cluster : int [1:6] 1 1 1 2 1 2
#.. (NB here there are things I've skipped )
Таким образом, вы можете извлечь кластер таким образом:
dtw_cluster2@cluster
[1] 1 1 1 2 1 2
Учитывая:
library(dtwclust)
dtw_cluster2 <- tsclust(sample_data, type="partitional",
k=2,
preproc = zscore,
distance="dtw_basic",
centroid = "pam",
trace=T)
с данными:
sample_data <-
structure(list(V1 = c(0L, 0L, 0L, 0L, 0L, 0L), V2 = c(0.1182197,
0.1276078, 0.1369958, 0.1029207, 0.1585535, 0.1488178), V3 = c(0.09057301,
0.09242144, 0.12569316, 0.10166359, 0.14510166, 0), V4 = c(0.08089888,
0.01348315, 0.03595506, 0.08089888, 0.08089888, 0.0741573), V5 = c(0.003350084,
0.060301508, 0.159128978, 0.201005025, 0.112227806, 0.212730318
), V6 = c(0, 0.02245599, 0.04491198, 0.06736798, 0.08982397,
0.11227996), V7 = c(0, 0.02298152, 0.04596305, 0.06894457, 0.09192609,
0.11490761)), class = "data.frame", row.names = c(NA, -6L))
Комментарии:
1. спасибо за ответ, но как построить наблюдения в соответствии с кластерами?
2. @Flore привет, не могли бы вы лучше объяснить желаемый результат? Ваш график уже разделен на кластеры.
3. Это немного более понятно. Что вы хотели бы видеть по осям x и y?
4. Я не уверен! но я думаю, что x представляет наблюдения из многомерных временных рядов в КЛАСТЕРАХ, а y будет расстоянием. Существуют ли другие варианты для x и y?
5. Как я вижу, каждый временной ряд является одномерным, и каждый из них имеет более 1 наблюдения. Кроме того, расстояние, как вы можете видеть
dtw_cluster2@distmat
, равно единице для каждой комбинации ts. У меня есть идея, что точечный график плохо подходит для этого анализа. Попробуйте прочитать эту статью , чтобы немного прояснить ситуацию.