利用R语言进行聚类分析实战(数据+代码+可视化+详细分析)

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972

   个人介绍: 研一|统计学|干货分享
         擅长Python、Matlab、R等主流编程软件
         累计十余项国家级比赛奖项,参与研究经费10w、40w级横向

文章目录

  • 1 研究目的
  • 2 数据背景
  • 3 案例演示
    • 3.1 读取数据
    • 3.2 按样本聚类
      • 3.2.1 最短距离法
      • 3.2.2 最长距离法
      • 3.2.3 中间距离法
      • 3.2.4 类平均法
      • 3.2.5 重心法
      • 3.2.6 离差平方和法
      • 3.2.7 K-means快速聚类法
      • 3.2.8 样本聚类总结
    • 3.3 按变量聚类
      • 3.3.1 最短距离法
      • 3.3.2 最长距离法绘制树状聚类图
      • 3.3.3 中间距离法
      • 3.3.4 类平均法
      • 3.3.5 重心法
      • 3.3.6 离差平方和法
      • 3.3.7 K-means快速聚类法
      • 3.3.8 变量聚类总结

1 研究目的

  对来源于Frank and Asuncion (2010)胎心宫缩监护(cardiotocography, CTG) 数据(CTG.xls)分别使用最短距离法、最长距离法、类平均法、重心法、离差平方和法(Ward.D、Ward.D2)、K-means法进行按样本聚类和按变量聚类。

2 数据背景

  胎心宫缩监护(cardiotocography, CTG) 数据(CTG.xls)。这组数据来源于Frank and Asuncion (2010)。该数据有2129 个观测值及23个变量,包含了致命心律(fetal heart rate, FHR)的各种度量以及基于监护记录的由专家分类的宫缩(uterine contraction, UC) 特征.这些变量的情况列示于下表. 表中最后三个分类变量的水平为:Tendency(FHR 直方图的趋势)有三个水平 (-1 = 左不对称, 0=对称, 1= 右不对称);CLASS(FHR 分类代码) 用1~10 表示从平静睡眠到可疑10种活动状况;NSP(胎儿状态分类代码) 有三个水平(1= 正常, 2= 疑似, 3= 病态)。删去3 个有不少缺失值的观测值, 形成新的数据文件ctg.naomit.csv。舍弃第23 个变量NSP, 用前面22个变量进行聚类分析。

  根据数据文件显示:NSP共有三个水平(1= 正常, 2= 疑似, 3= 病态),故本文聚类过程中共分为三类。

3 案例演示

3.1 读取数据

  运行程序:

data<-read.csv("G:\\ctg.naomit.csv")                 #数据读取
data1<-data[c(1:2126),c(1:22)]                                       #选取数据

3.2 按样本聚类

3.2.1 最短距离法

  运行程序:

library(MASS)                            #加载包
data2=scale(data1)                       #标准化
D=dist(data2)                            #计算距离
plot(hclust(D,"single"))                 #最短距离法绘制树状聚类图
hc=hclust(D,"single")                    #计算新类与当前各类距离
head(data.frame(hc$merge,hc$height))     #显示前六行数据

  运行结果:

##     X1   X2 hc.height
## 1  -68  -69         0
## 2 -230 -788         0
## 3 -234 -235         0
## 4 -305 -307         0
## 5 -324 -325         0
## 6 -327 -334         0

  运行程序:

rect.hclust(hclust(D,"single"),3)        #加三分类框

  运行结果:

图1 最短距离法树状聚类图

3.2.2 最长距离法

  运行程序:

hc=hclust(D,"complete")                  #计算新类与当前各类距离
head(data.frame(hc$merge,hc$height))     #显示前六行数据

  运行结果:

##     X1   X2 hc.height
## 1  -68  -69         0
## 2 -230 -788         0
## 3 -234 -235         0
## 4 -305 -307         0
## 5 -324 -325         0
## 6 -327 -334         0

  运行程序:

plot(hc)                                 #绘制树状聚类图
rect.hclust(hc,3)                        #加三分类框

  运行结果:

图2 最长距离法树状聚类图

3.2.3 中间距离法

  运行程序:

hc=hclust(D,"median")                    #计算新类与当前各类距离
head(data.frame(hc$merge,hc$height))     #显示前六行数据

  运行结果:

##     X1   X2 hc.height
## 1  -68  -69         0
## 2 -230 -788         0
## 3 -234 -235         0
## 4 -305 -307         0
## 5 -324 -325         0
## 6 -327 -334         0

  运行程序:

plot(hc)                                 #绘制树状聚类图
rect.hclust(hc,3)                        #加三分类框

  运行结果:

图3 中间距离法树状聚类图

3.2.4 类平均法

  运行程序:

hc=hclust(D,"average")                   #计算新类与当前各类距离
head(data.frame(hc$merge,hc$height))     #显示前六行数据

  运行结果:

##     X1   X2 hc.height
## 1  -68  -69         0
## 2 -230 -788         0
## 3 -234 -235         0
## 4 -305 -307         0
## 5 -324 -325         0
## 6 -327 -334         0

  运行程序:

plot(hc)                                 #绘制树状聚类图
rect.hclust(hc,3)                        #加三分类框

  运行结果:

图4 类平均法树状聚类图

3.2.5 重心法

  运行程序:

hc=hclust(D,"centroid")                  #计算新类与当前各类距离
head(data.frame(hc$merge,hc$height))     #显示前六行数据

  运行结果:

##     X1   X2 hc.height
## 1  -68  -69         0
## 2 -230 -788         0
## 3 -234 -235         0
## 4 -305 -307         0
## 5 -324 -325         0
## 6 -327 -334         0

  运行程序:

plot(hc)                                 #绘制树状聚类图
rect.hclust(hc,3)                        #加三分类框

  运行结果:

图5 重心法树状聚类图

3.2.6 离差平方和法

1.ward.D法

  运行程序:

plot(hclust(D,"ward.D"))                 #绘制树状聚类图
rect.hclust(hclust(D,"ward.D"),3)        #加三分类框

  运行结果:

图6 Ward.D法树状聚类图

2.ward.D2法

  运行程序:

plot(hclust(D,"ward.D2"))                #离差平方和
rect.hclust(hclust(D,"ward.D2"),3)       #加三分类框

  运行结果:

图7 Ward.D2法树状聚类图

3.2.7 K-means快速聚类法

  由于K-means聚类法不适用于分类属性变量的聚类,故选取前20个变量进行K-means聚类。

  运行程序:

km=kmeans(data2[,1:20],3)    
plot(data2,pch=km$cluster,col=km$cluster)

  运行结果:

图8 Kmeans法树状聚类图

3.2.8 样本聚类总结

  首先选取数据前22个变量的样本数据,为消除量纲的影响对数据进行标准化;再对样本分别进行最短距离、最长距离、中间距离、类平均、重心、离差平方和、Kmean法进行样本聚类,但由于样本量较大,导致数据显示结果较为混乱,从不同的系统聚类法中可以看出离差平方和法相较于其他系统聚类方法进行聚类结果分类更为明显。在K-mean快速聚类法中,由于K-mean聚类对分类属性的数据不适用,所以考虑去除变量Tendency、CLASS,然后进行K-mean快速聚类,将3类结果以不同颜色和形状呈现,具有较强观赏性。

3.3 按变量聚类

3.3.1 最短距离法

  运行程序:

d=data.frame(cor(data2))                   #计算各变量相似系数
D1=as.dist(d)                              #计算各变量距离     
hc1=hclust(D1,method = "single")           #最短距离法
plot(hc1)                          
rect.hclust(hc1,3)                         #加三分类框

  运行结果:

图9 最短距离法树状聚类图

3.3.2 最长距离法绘制树状聚类图

  运行程序:

hc1=hclust(D1,method = "complete")         #最长距离法
plot(hc1)                          
rect.hclust(hc1,3)                         #加三分类框

  运行结果:

图10 最长距离法树状聚类图

3.3.3 中间距离法

  运行程序:

hc1=hclust(D1,method = "median")           #中间距离法
plot(hc1)                          
rect.hclust(hc1,3)                         #加三分类框

  运行结果:

图11 中间距离法树状聚类图

3.3.4 类平均法

  运行程序:

hc1=hclust(D1,method = "average")          #类平均法
plot(hc1)                          
rect.hclust(hc1,3)                         #加三分类框

  运行结果:

图12 类平均法树状聚类图

3.3.5 重心法

  运行程序:

hc1=hclust(D1,method = "centroid")          #重心法
plot(hc1)                          
rect.hclust(hc1,3)                          #加三分类框

  运行结果:

图13 重心法树状聚类图

3.3.6 离差平方和法

1.ward.D法

  运行程序:

hc1=hclust(D1,method = "centroid")          #重心法
plot(hc1)                          
rect.hclust(hc1,3)                          #加三分类框

  运行结果:

图14 Ward.D法树状聚类图

2.ward.D2法

  运行程序:

hc1=hclust(D1,method = "ward.D2")          #Ward.D2法
plot(hc1)                          
rect.hclust(hc1,3)                         #加三分类框

  运行结果:

图15 Ward.D2法树状聚类图

3.3.7 K-means快速聚类法

  运行程序:

pm<-kmeans(d,3)                #分三类
pm$clusterkm=kmeans(data2[,1:20],3)    
plot(data2,pch=km$cluster,col=km$cluster)

  运行结果:

##       LB       AC       FM       UC       DL       DS       DP     ASTV 
##        3        2        1        2        2        1        2        1 
##     MSTV     ALTV     MLTV    Width      Min      Max     Nmax   Nzeros 
##        2        1        1        2        3        2        2        2 
##     Mode     Mean   Median Variance Tendency    CLASS 
##        3        3        3        2        1        1

3.3.8 变量聚类总结

  首先计算22个变量的相似系数并求出其相似聚类,分别利用最短距离、最长距离、中间距离、类平均、重心、离差平方和、Kmean法进行变量聚类,不同方法聚类结果如表1所示,结合图9—图15能较为直观地看出变量聚类情况。

表1 对变量聚类汇总结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

width:100%和width:auto有啥区别

项目中使用了with属性&#xff0c;突然好奇auto 和 100% 的区别&#xff0c;特地搜索实践总结了一下观点 一、 width属性介绍二、 代码带入三、 分析比较四、 总结 一、 width属性介绍 width 属性用于设置元素的宽度。width 默认设置内容区域的宽度&#xff0c;但如果 box-siz…

Vue3切换路由白屏刷新后才显示页面内容

1.首先检查页面路由以及页面路径配置是否配置错误。 在router-view 中给路由添加key标识。 &#xff01;&#xff01;注意&#xff1a;有使用layout封装布局的&#xff0c;是在layout下的主页面中的 router-view 添加标识&#xff0c;不是在src根目录下main.vue中修改&#xf…

基于vue-office实现docx、xlsx、pdf文件的在线预览

概述 在做项目的时候会遇到docx、xlsx、pdf等文件的在线预览需求&#xff0c;实现此需求可以有多种解决方式&#xff0c;本文基于vue-office实现纯前端的文件预览。 效果 如下图&#xff0c;分别为docx、xlsx、pdf三种类型的文件在线加载后的效果。你也可以访问官方预览网址…

sawForceDimensionSDK安装,sigma7+ros

force dimension的sdk中没有关于ros&#xff0c;借助开源的sawForceDimensionSDK实现对于数据的封装和可视化&#xff0c;方便后续使用 链接&#xff1a; GitHub - jhu-saw/sawForceDimensionSDK 具体步骤&#xff1a; 安装qt和ros&#xff0c;官网下载Force Dimension SDK …

小马识途营销顾问解析舆情处置方法

大部分知名企业都逃不过负面舆情这一关&#xff0c;有负面不一定企业就不规范&#xff0c;产品就不好。其实&#xff0c;企业做大了&#xff0c;难以做到尽善尽美&#xff0c;有时候是同行不正当竞争造成的…… 总之&#xff0c;网络平台上面的负面舆情信息的影响不可小视&…

什么是回表、索引覆盖、索引下推【重点】

参考链接 【1】https://xiaolincoding.com/mysql/index/index_interview.html#%E6%8C%89%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%88%86%E7%B1%BB 【2】https://www.toutiao.com/article/7095749260137726476/?wid1709192807222 【3】https://zhuanlan.zhihu.com/p/401198674…

算法沉淀——动态规划之两个数组的 dp(下)(leetcode真题剖析)

算法沉淀——动态规划之两个数组的 dp 01.正则表达式匹配02.交错字符串03.两个字符串的最小ASCII删除和04.最长重复子数组 01.正则表达式匹配 题目链接&#xff1a;https://leetcode.cn/problems/regular-expression-matching/ 给你一个字符串 s 和一个字符规律 p&#xff0c…

产品经理岗位的任职资格和职业规划

产品经理主要是商业银行以客户为导向的&#xff0c;具体负责组织银行某一金融产品线的创新设计、生产营销和管理服务的工作。这类人士主要负责应用实施工作&#xff0c;其中产品线由一系列的产品构成&#xff0c;公司的产品经理主要分为全过程产品创新设计专家、全过程产品生产…

武汉灰京文化:跨平台和云游戏,手游行业的未来发展趋势

随着科技的不断进步和智能设备的普及&#xff0c;手游行业正迎来新的发展机遇。武汉灰京文化认为&#xff0c;在这个过程中&#xff0c;跨平台游戏和云游戏作为两大关键技术将推动手游行业迈向更加丰富、便捷和多元化的发展。 跨平台游戏的出现将为玩家带来全新的游戏体验。在…

java常用环境docker安装

配置目录 rocketmqredismysql不配置binlog配置binlog Nacoszookeeper 本文为精简安装&#xff0c;部分不带容器卷映射&#xff0c;仅供以学习使用。 rocketmq nameservice sudo docker run -d \ --privilegedtrue \ --name rmqnamesrv \ -p 9876:9876 \ -e "MAX_HEAP_SI…

visio、ppt、office等另存图片,如何设置更清晰

visio、ppt、office等另存图片&#xff0c;如何设置更清晰 选中要另存为的部分——文件——另存为——选好位置——格式选jpg——保存——按下图设置&#xff1a;质量100%&#xff0c;分辨率选打印机&#xff0c;大小选屏幕——确定

android开发前景2019,android高级面试framework

到底是公司养活了我&#xff0c;还是我养活了公司&#xff1f; 1. 很难在一家公司干到退休 在我父母那一代&#xff0c;一个上班的职工&#xff0c;往往可以在一家单位干到退休&#xff0c;名副其实的“铁饭碗”。甚至更早之前的年代&#xff0c;职工的子女还可以接父母的班&a…

计算机专业大学四年应该如何规划(Java方向)

计算机专业的学生&#xff0c;如何在大学四年内提高自己的竞争力&#xff0c;毕业之后直接进大厂工作&#xff1f; 以下将从大学四年计算机专业的学习规划、课程设置、能力提升、参考书籍等方面&#xff0c;为同学们提供一些建议和指导。 大一&#xff1a; 主攻技能学习并且达…

数据结构之数组

一、定义 数组&#xff08;Array&#xff09;是一种用连续的内存空间存储相同数据类型数据的线性数据结构。 二、内存结构 1.创建数组 我们创建一个数组 int[] array {22,33,88,66,55,25} &#xff0c;在内存结构如下图所示&#xff1a; 首先创建了array数组&#xff0c;会…

Node.js基础---npm与包

包 概念&#xff1a;Node.js 中的第三方模块又叫做包 来源&#xff1a;由第三方个人或团队开发出来的&#xff0c;免费使用&#xff0c;且为开源 为什么需要&#xff1a;Node.js的内置模块只有一些底层API&#xff0c;开发效率低 包是基于内置模块封装出来的&#xff0c;提供更…

python实现跨进程(跨py文件)通信01

前言 项目中总会遇到数据需要跨进程通信的问题&#xff0c;今天就给大家带来一套简单的跨进程通信代码。代码分为服务端与客户端两部分。 一、server端 import multiprocessing import timedef do_socket(conn, addr, ):try:while True:if conn.poll(1) False:time.sleep(0…

ZCANPRO基础操作流程

硬件准备 测试单关节需要准备如下工具&#xff1a; 电源&#xff1a; 推荐使用20-27V直流电源。关节峰值功率为额定功率的三倍。 CAN卡&#xff1a; 推荐使用周立功USB转CANFD卡&#xff0c;我们的单关节测试软件适配了该型号CAN卡驱动。 WHJ系列关节模组 WHJ系列关节模组包含…

2024最新大厂Android面试真题解析,三年老Android经验面经

前言 不知道大家面试的时候&#xff0c;有没有遇到这种情况&#xff0c;面试工资谈的是10K&#xff0c;最后干着40K的活&#xff01;说着冠冕堂皇&#xff0c;提升大家能力的话&#xff0c;做着死命压榨员工&#xff0c;996成了程序员心里的魔咒&#xff01; 初级安卓开发工程…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的活体人脸检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本篇博客详细讲述了如何利用深度学习构建一个活体人脸检测系统&#xff0c;并且提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并进行了与前代算法YOLOv7、YOLOv6、YOLOv5的细致对比&#xff0c;展示了其在图像、视频、实时视频流和批量文件处…

CSS_实现三角形和聊天气泡框

如何用css画出一个三角形 1、第一步 写一个正常的盒子模型&#xff0c;先给个正方形的div&#xff0c;便于观察&#xff0c;给div设置宽高和背景颜色 <body><div class"box"></div> </body> <style>.box {width: 100px;height: 100px…