Этот вопрос довольно сложный, вот как я подхожу к проблеме, надеясь помочь и, возможно, начать обсуждение этого вопроса.
Примечание:
- это как мне кажется, я мог бы подойти к проблеме;
- Я не знаю двухэтапной кластеризации, поэтому я использую kmeans;
- она основана на ваших данных, но вы можете легко обобщить ее: Я сделал это зависимым от ваших данных, потому что это проще объяснить.
Итак, вы создаете первую кластеризацию с переменными before
, затем значение переменной изменяется (after
переменных ), и вы хотите увидеть, находятся ли идентификаторы в одном кластере.
Это заставляет меня думать, что вам нужен только первый набор кластеров (для переменных before
), а затем посмотреть, изменились ли идентификаторы: не нужно делать вторую кластеризацию, а только посмотреть, если они перешел от одного кластера к другому.
# first, you make your model of clustering, I'm using a simple kmeans
set.seed(1234)
model <- kmeans(df[,2:6],2)
# you put the clusters in the dataset
df$before_cluster <- model$cluster
Теперь идея состоит в том, чтобы вычислить евклидово расстояние от идентификаторов с новыми переменными (after
переменные) до центроидов, вычисленных по before
variabiles:
# for the first cluster
cl1 <- list()
for (i in 1:nrow(df)) {
cl1[[i]] <- dist(rbind(df[i,7:11], model$centers[1,] ))
}
cl1 <- do.call(rbind, cl1)
colnames(cl1) <- 'first'
# for the second cluster
cl2 <- list()
for (i in 1:nrow(df)) {
cl2[[i]] <- dist(rbind(df[i,7:11], model$centers[2,] ))
}
cl2 <- do.call(rbind, cl2)
colnames(cl2) <- 'second'
# put them together
df <- cbind(df, cl1, cl2)
Теперь последняя часть, которую вы можете определить, изменил ли кто-либо кластер, получив наименьшее расстояние от центроидов (самый маленький -> это новый кластер), выбирая «новый» кластер.
df$new_cl <- ifelse(df$first < df$second, 1,2)
df
id var1_before var2_before var3_before var4_before var5_before var1_after var2_after var3_after var4_after var5_after first second before_cluster first second new_cl
1 1 -0.16 -0.70 2.47 -1.08 0.54 -0.43 -0.69 2.97 -1.11 1.22 0.6852372 0.8151840 2 0.6852372 0.8151840 1
2 2 -0.31 -1.06 2.97 -1.22 0.40 -0.18 -0.38 3.15 -0.99 0.41 0.7331098 0.5208887 1 0.7331098 0.5208887 2
3 3 -0.26 -0.51 2.91 -0.92 0.46 -0.59 -1.19 3.35 -1.26 1.01 0.6117598 1.1180004 2 0.6117598 1.1180004 1
4 4 -0.77 -0.81 3.01 -1.16 0.79 0.64 -0.77 1.52 -0.39 0.24 2.0848381 1.5994765 1 2.0848381 1.5994765 2
Кажется, они все изменили кластер.