setwd("D:\\Rdownload\\lianxi\\fourth") #设定工作路径
ex4.5<-read.csv("ex4.5.csv",header=T) #将ex4.5.csv数据读入
d4.5=ex4.5[,-1] #ex4.5的第一列为地名,不是数值先去掉
rownames(d4.5)=ex4.5[,1] #用ex4.5的第一列为d4.5的行重新命名
KM<-kmeans(d4.5, 4, nstart=20, algorithm="Hartigan-Wong") #聚类的个数为4
#初始随机集合的个数为20, 算法为"Hartigan-Wong"(默认)
sort(KM$cluster) #对分类结果进行排序并查看
## 北京 上海 河北 山西 内蒙古 吉林 黑龙江 安徽 江西 贵州 云南
## 1 1 2 2 2 2 2 2 2 2 2
## 陕西 甘肃 青海 宁夏 新疆 辽宁 江苏 山东 河南 湖北 湖南
## 2 2 2 2 2 3 3 3 3 3 3
## 广西 重庆 四川 天津 浙江 福建 广东 海南
## 3 3 3 4 4 4 4 4
KM<-kmeans(d4.5, 5, nstart=15); sort(KM$cluster) #聚类的个数 k=5
## 广东 河北 辽宁 江苏 安徽 山东 河南 湖北 湖南 广西 重庆
## 1 2 2 2 2 2 2 2 2 2 2
## 四川 天津 浙江 福建 海南 山西 内蒙古 吉林 黑龙江 江西 贵州
## 2 3 3 3 3 4 4 4 4 4 4
## 云南 陕西 甘肃 青海 宁夏 新疆 北京 上海
## 4 4 4 4 4 4 5 5
##两种情形下,天津、浙江、福建和广东都聚为一类;江西、贵州、云南、陕西、甘肃、青海、宁夏、新疆、辽宁和江苏都聚为一类;只是在其余地区的分类上有一定变化,即k = 4时的第4类中有10个地区划分出来单独聚为k = 5时的第2类。
setwd("D:\\Rdownload\\lianxi\\fourth") #设定工作路径
ex4.5<-read.csv("ex4.5.csv",header=T) #将ex4.5.csv数据读入
d4.5=ex4.5[,-1] #去掉第1列指标名称,数据集取名为d4.5
rownames(d4.5)=ex4.5[,1] #为d4.5的行重新命名
d=dist(1- d4.5) #将相关系数阵转化为距离阵
HC<-hclust(d, method="average") #采用类平均法作系统聚类
plot(HC,hang=-1) #从底部对齐绘制聚类树状图
abline(h=20000) ; abline(h=14000) #画合并距离为20000和14000的水平线
##可见,当取合并距离为20000时,聚为两类:第1类:北京、上海;第2类:广东、辽宁、山东、江苏、四川、广西、黑龙江、吉林、江西、青海、云南、新疆、山西、甘肃、内蒙古、宁夏、贵州、陕西、湖北、重庆、河北、安徽、河南、湖南、海南、天津、浙江、福建。 ##当取合并距离为14000时,聚为三类:第1类:北京、上海;第2类:广东;第3类:辽宁、山东、江苏、四川、广西、黑龙江、吉林、江西、青海、云南、新疆、山西、甘肃、内蒙古、宁夏、贵州、陕西、湖北、重庆、河北、安徽、河南、湖南、海南、天津、浙江、福建。
KM2<-kmeans(d, 2, nstart=10, algorithm="Hartigan-Wong")
sort(KM2$cluster) #对k=2的分类结果进行排序查看
## 北京 上海 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 江苏 浙江
## 1 1 2 2 2 2 2 2 2 2 2
## 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆
## 2 2 2 2 2 2 2 2 2 2 2
## 四川 贵州 云南 陕西 甘肃 青海 宁夏 新疆
## 2 2 2 2 2 2 2 2
KM3<-kmeans(d, 3, nstart=20, algorithm="Hartigan-Wong")
sort(KM3$cluster) #对k=3的分类结果进行排序查看
## 天津 江苏 浙江 福建 广东 海南 北京 上海 河北 山西 内蒙古
## 1 1 1 1 1 1 2 2 3 3 3
## 辽宁 吉林 黑龙江 安徽 江西 山东 河南 湖北 湖南 广西 重庆
## 3 3 3 3 3 3 3 3 3 3 3
## 四川 贵州 云南 陕西 甘肃 青海 宁夏 新疆
## 3 3 3 3 3 3 3 3
##对比可得,合并距离为20000时的两类结果与k = 2时的两类结果有相似的分组逻辑;合并距离为14000时的三类结果与k = 3时的三类结果有相似的分组逻辑。