Построить кластеры наблюдений, которые представляют временной ряд

#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. У меня есть идея, что точечный график плохо подходит для этого анализа. Попробуйте прочитать эту статью , чтобы немного прояснить ситуацию.