使用“组内链接”进行R聚类

时间:2013-08-04 02:30:17

标签: r spss hierarchical-clustering

我正在SPSS .sav文件上重新运行层次分析以获得R的效率。数据集如下所示:

id  hour0 hour1 hour2 ... hour23
1   0.5   0.3   0.1       1.1  
2   0.3   0.3   0.2       0.6
3   1.0   0.8   0.5       0.9  

在SPSS中,我必须告诉软件哪个变量是案例标识符(这里是'id'),因此在创建矩阵时会将其排除。但我在R中没有发现任何争论:

d <- dist(mydata, method = "euclidean") # distance matrix

此外,没有方法选项作为'平方欧氏距离'(在SPSS中经常使用):

  

方法:要使用的距离测量。这必须是“欧几里得”,“最大”,“曼哈顿”,“堪培拉”,“二进制”或“minkowski”之一。可以给出任何明确的子串。

当然,我可以通过导入这样的数据集来制作矩阵:

hour0 hour1 hour2 ... hour23  
0.5   0.3   0.1       1.1 
0.3   0.3   0.2       0.6 
1.0   0.8   0.5       0.9 

但是我想在这里保留id,因为我必须知道每个人在最终输出中属于哪个集群,比如SPSS层次集群输出(clus#表示SPSS为#clusters提供解决方案):

id  hour0 hour1 hour2 ... hour23 clus7 clus6
1   0.5   0.3   0.1       1.1    3     3
2   0.3   0.3   0.2       0.6    7     6
3   1.0   0.8   0.5       0.9    1     1 

最后一个问题是R层次聚类中没有“组内链接”的论据:

fit <- hclust(d, method="ward")  
  

方法:使用的凝聚方法。这应该是(一个明确的缩写)“病房”,“单身”,“完整”,“平均”,“麦克风”,“中位数”或“质心”之一。

在SPSS中,“平均”方法分为两种方法:“组间联系”和“组内联系”,输出可能因两者之间的选择而不同。

所以有人知道我应该做什么或者应该安装什么包吗?问题是:

  1. 矩阵创建中的欧氏距离法
  2. 案例标识符
  3. 属于输出的群集
  4. 层次聚类中的组内链接方法

1 个答案:

答案 0 :(得分:1)

也许这可以帮助......但我不确定,因为我从未使用过SPSS ......

# 1)
# for square use
# according to:

http://r.789695.n4.nabble.com/squared-euclidean-distance-td883513.html

d <- d^2

# 2)
# take id´s as rownames
rownames(mydata) <- mydata[,1]
mydata <- mydata[, -1]
d <- dist(mydata, method = "euclidean")

fit <- hclust(d, method="ward")
plot(fit) # to see the tree

# 3)
max_k <- 5 # max members you want
cutree(fit, k=1:max_k)

# or for a fixed number eg. 5, get number
# of members per cluster
table(cutree(fit, k=5))

# ... and comparing two diffrent k values
table(cutree(fit, k=5), cutree(fit, k=8))


# 4)
# again I assume k=5
install.packages("fpc") # if not installed
require("fpc")
cluster.stats(d, cutree(fit, k=5))