我正在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中,“平均”方法分为两种方法:“组间联系”和“组内联系”,输出可能因两者之间的选择而不同。
所以有人知道我应该做什么或者应该安装什么包吗?问题是:
答案 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))