聚类分析(Cluster Analysis) 是研究“物以类聚”的一种方法,有时称为群分析、点群分析、簇类分析等。
聚类分析是根据研究对象的特征对研究对象进行分类的多元分析技术的总称。聚类分析是应用最广泛的分类技术,它把性质相近的个体归为一类,使同一类的个体具有高度的同质性。
聚类分析大部分都属于探测性研究,最终结果是产生研究对象的分类,通过对数据的分类研究还能产生假设。聚类分析也可用于证实性目的,对于通过其他方法确定的数据分类,可以应用聚类分析进行检验。
相似性度量包括:距离和相似系数.
样品之间的距离和相似系数有着各种不同的定义,而这些定义与变量的类型有着非常密切的关系.
变量的测量尺度:间隔、有序和名义尺度.
常用的距离包括:
dist(x, method = "euclidean", diag = FALSE, upper = FALSE, p = 2)
其中参数含义:
参数 | 含义 |
---|---|
X | 数据矩阵 |
method | 距离计算方法包括"euclidean", "maximum“, “manhattan”, “canberra”, “binary” or “minkowski” |
diag | 是否包含对角线元素 |
upper | 是否需要矩阵上三角 |
p | Minkowski距离的幂次 |
示例:
X=c(1,2,6,8,11)
dist(X,diag=1,upper=1)
运行结果如下:
1 2 3 4 5
1 0 1 5 7 10
2 1 0 4 6 9
3 5 4 0 2 5
4 7 6 2 0 3
5 10 9 5 3 0
hclust(d, method = “complete”, …)
plot(x, labels = NULL, hang = 0.1, ...)
参数的含义如下:
参数 | 含义 |
---|---|
d | 由dist函数产生的相似矩阵 |
method | 聚类方法“single“(最短距离), ”complete“(最长距离), ”average” (类平均法), “median” (中间距离法), “centroid” (重心法), “ward.D” (ward法) |
x | hclust得出的聚类结果. |
labels | 树形图标签 |
kmeans(x, centers, iter.max = 10, nstart = 1, algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"), trace=FALSE)
参数的含义如下:
参数 | 含义 |
---|---|
x | 数据阵 |
centers | 聚类数或初始聚类点 |
iter.max | 最大迭代步数 |
数据资料来源:《应用多元统计分析》(第五版,王学民 编著)配书资料 例6.3.3
数据包括1999年全国31个省、直辖市和自治区的城镇居民家庭平均每人全年消费性支出的八个主要变量数据. 这八个变量是:
分别用最短距离法、重心法和Ward方法对各地区作聚类分析. 为同等地对待每一变量,在作聚类前,先对各变量作标准化变换.。
代码如下:
d6.3.3=read.csv('examp6.3.3.csv',header=1)
d6.3.3s=scale(d6.3.3[,-1]) #标准化数据
rownames(d6.3.3s)=d6.3.3[,1]
hc=hclust(dist(d6.3.3s),'ward.D') #使用Ward法系统聚类
plot(hc,hang=-1) #做出树形图
rect.hclust(hc,k=3) #作聚类框
cutree(hc, k=3) #将聚成三类的结果分别以1, 2, 3表示
> cutree(hc, k=3) #将聚成三类的结果分别以1, 2, 3表示
北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建
1 2 2 3 3 3 3 3 1 2 1 3 3
江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏
3 2 3 2 2 1 3 3 2 2 3 2 2
陕西 甘肃 青海 宁夏 新疆
3 3 3 3 2
运行代码:
kcl=kmeans(d6.3.3s,3)
sort(kcl$cluster) #对聚类结果进行排序
fviz_nbclust(d6.3.3s,kmeans,method='wss')
> sort(kcl$cluster) #对聚类结果进行排序
天津 江苏 福建 山东 湖南 重庆 云南 西藏 北京 上海 浙江 广东 河北
1 1 1 1 1 1 1 1 2 2 2 2 3
山西 内蒙古 辽宁 吉林 黑龙江 安徽 江西 河南 湖北 广西 海南 四川 贵州
3 3 3 3 3 3 3 3 3 3 3 3 3
陕西 甘肃 青海 宁夏 新疆
3 3 3 3 3
数据资料来源:《应用多元统计分析》(第五版,王学民 编著)配书资料 例6.3.7
对305名女中学生测量八个体型指标:
代码如下:
d6.3.7 = read.csv('examp6.3.7.csv',header=1)
d = as.dist(1-d6.3.7[,-1], diag=T) #转换为距离矩阵
> d
身高 手臂长 上肢长 下肢长 体重 颈围 胸围 胸宽
身高 0.000
手臂长 0.154 0.000
上肢长 0.195 0.119 0.000
下肢长 0.141 0.174 0.199 0.000
体重 0.527 0.624 0.620 0.564 0.000
颈围 0.602 0.674 0.681 0.671 0.238 0.000
胸围 0.699 0.723 0.763 0.673 0.270 0.417 0.000
胸宽 0.618 0.585 0.655 0.635 0.371 0.423 0.461 0.000
hc = hclust(d, "complete") #最长距离法
plot(hc, hang=-1) #树形图
rect.hclust(hc, k=2) #将聚成的两类用边框界定
cutree(hc, k=2) #将聚成两类的结果分别以1, 2表示
> cutree(hc, k=2) #将聚成两类的结果分别以1, 2表示
身高 手臂长 上肢长 下肢长 体重 颈围 胸围 胸宽
1 1 1 1 2 2 2 2