您可以使用高爾距離來計算分類變量之間的距離。
下面的例子:
# Import data
dta <- read.table(header = TRUE, textConnection("Var1 var2 var3 var4
1 2 1 1
3 2 1 3
1 2 0 1
3 2 2 3"))
dta <- as.data.frame(lapply(dta, as.factor))
# Create distance matrix using gower distance using gower package (fast)
# The code below computes the complete distance matrix, while only the upper
# or lower half is needed; so this could be improved.
library(gower)
pairs <- expand.grid(x = seq_len(nrow(dta)), y = seq_len(nrow(dta)))
dist <- gower_dist(dta[pairs$x,], dta[pairs$y, ])
dist <- array(dist, dim = c(nrow(dta), nrow(dta)))
# Convert matrix to distance object
dist <- as.dist(dist)
# Cluster using distance matrix; for this there are numerous options
# Use hierarchical clustering in this case
cl <- hclust(dist)
plot(cl)
使用羣集包的另一種溶液(ALS中含有大量的 聚類方法)
library(cluster)
dist <- daisy(dta, metric = "gower")
cl <- hclust(dist)
plot(cl)
爲了從分級聚類導出聚類,該樹需要被「剪切」到集羣中。這可以通過指定樹需要被切割的高度來完成,或者通過指定簇的數量來完成。下面我指定集羣的數量:在分類數據
dta$cluster <- cutree(cl, k = 2)
而且聚類可以圍繞中心點算法分區使用高爾的距離,如果我沒看錯進行。 –