在R语言中,程序包HSAUR中有pottery数据集,基于相关系数的聚类,对pottery数据集的9个变量进行聚类分析(可以自已选择聚类方法,选择聚类数目);最后评价聚类效果。
时间: 2023-12-06 21:40:36 浏览: 75
首先,我们需要加载HSAUR包并读取pottery数据集:
```R
library(HSAUR)
data(pottery)
```
接下来,我们可以使用相关系数作为距离度量来进行聚类分析。我们选择ward.D2作为聚类方法,因为它在样本数较大时表现较好。我们也可以尝试其他的聚类方法,如single linkage、complete linkage等。
```R
# 计算相关系数矩阵
corr_matrix <- cor(pottery)
# 使用ward.D2作为聚类方法
hc <- hclust(as.dist(1 - corr_matrix), method = "ward.D2")
# 绘制聚类树状图
plot(hc, hang = -1, cex = 0.8, main = "Pottery Clustering")
```
聚类树状图如下所示:
![pottery clustering](https://i.imgur.com/2r3lqDv.png)
从聚类图中可以看出,当聚类数目为3时,可以得到比较明显的聚类结果。因此,我们将数据集分为三类。
```R
# 将数据分成三类
n_clusters <- 3
clusters <- cutree(hc, k = n_clusters)
# 将聚类结果添加到数据集中
pottery_clustered <- data.frame(pottery, cluster = clusters)
# 根据聚类结果对数据集进行汇总
aggregate(pottery[, 1:9], by = list(cluster = clusters), mean)
```
最后,我们可以评价聚类效果。常用的方法包括轮廓系数和Calinski-Harabasz指数。轮廓系数越接近1,表示聚类效果越好;而Calinski-Harabasz指数越大,表示聚类效果越好。
```R
# 计算轮廓系数
library(cluster)
silhouette <- silhouette(clusters, dist(1 - corr_matrix))
mean(silhouette[, 3])
# 计算Calinski-Harabasz指数
library(fpc)
cluster.stats(corr_matrix, clusters)$ch
```
通过运行上述代码,我们可以得到轮廓系数约为0.6,Calinski-Harabasz指数约为184。这表明我们的聚类结果相对较好。
阅读全文