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

news2025/1/18 6:50:32

🍉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.coloradmin.cn/o/1470266.html

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

相关文章

红队攻防之powershell上线基础免杀(一)

不努力&#xff0c;你背井离乡干嘛&#xff1f;当卧底啊 环境为win10&#xff0c;在哥斯拉生成的webshell下&#xff0c;执行powershell命令。 测试杀毒软件为&#xff1a;火绒&#xff0c;腾讯电脑管家 哥斯拉生成php文件的webshell 如图 哥斯拉进行连接 把要执行命令的文件…

[树形DP] 树的最大独立集

题目 这个挺简单的&#xff0c;注意状态转移时&#xff0c;如果选这个点&#xff0c;那么它的子结点状态应该为不选&#xff0c;如果这个点的状态是不选&#xff0c;那么可以在它的子结点里选择&#xff1a;选/不选两个状态&#xff0c;所以最后结果是max挑选。 #include<b…

业务流程管理系统(BPMS):一文掌握,组织业务流程优化必备。

大家好&#xff0c;我是大美B端工场&#xff0c;本期继续分享商业智能信息系统的设计&#xff0c;欢迎大家关注&#xff0c;如有B端写系统界面的设计和前端需求&#xff0c;可以联络我们。 一、什么是BPMS系统 BPMS是Business Process Management System&#xff08;业务流程管…

Java面试:Spring Cloud Alibaba

文章目录 引言I Spring Cloud Alibaba1.1 配置文件加载的优先级(由高到低)1.2 注册中心1.3 rpcII 高并发场景:缓存穿透/缓存失效/雪崩如何解决2.1 缓存穿透2.2 缓存击穿(失效)2.3 缓存雪崩引言 微服务涉及的中间件分布式事务事务的传播方式事务的隔离级别缓存穿透/缓存失效…

基于springboot+vue的校园社团信息管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

代码随想录算法训练营第三天

● 自己看到题目的第一想法 203.移除链表元素 方法一&#xff1a; 思路&#xff1a; 设置虚拟头节点 dummyhead 设置临时指针 cur 遍历 整个链表 循环&#xff1a; 如果 cur !nullptr &&cur->next !nullptr 则 遍历链表 否则结束遍历 如果 cur->next val 则…

Linux之安装jdk,tomcat,mysql,部署项目

目录 一、操作流程 1.1安装jdk 1.2安装tomcat&#xff08;加创建自启动脚本&#xff09; 1.3 安装mysql 1.4部署项目 一、操作流程 首先把需要用的包放进opt文件下 1.1安装jdk 把jdk解压到/usr/local/java里 在刚刚放解压包的文件夹打开vim /etc/profile编辑器&#xff0c…

QoS 服务质量

服务质量 QoS (Quality of Service) 服务质量可用若干基本性能指标来描述&#xff0c;包括&#xff1a;可用性、差错率、响应时间、吞吐量、分组丢失率、连接建立时间、故障检测和改正时间等。 服务提供者可向其用户保证某一种等级的服务质量。 服务性能的总效果&#xff0c;…

JavaWeb——007MYSQL(DQL多表设计)

# 数据库开发-MySQL 一级目录二级目录三级目录 1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…

操作符详解3

✨✨ 欢迎大家来到莉莉的博文✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 前面我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单目操作 符&#xff0c;今天继续介绍一部分。 目录 1.操作符的分类 2…

云尚办公-0.2.0

4. service层 MyBatisPlus封装了service层&#xff0c;只需要继承IService接口即可。并且MyBatisPlus实现了提供了接口的实现类。 package pers.beiluo.yunshangoffice.service;import com.baomidou.mybatisplus.extension.service.IService; import pers.beiluo.yunshangoff…

【程序员必备技能】Git入门

目录 &#x1f308;前言&#x1f308; &#x1f4c1; Git的概念 &#x1f4c2; 版本控制 &#x1f4c2; 集中式 和 分布式 ​ &#x1f4c1; 创建和配置本地仓库 &#x1f4c1; 理解工作区&#xff0c;暂存区&#xff0c;版本库 &#x1f4c1; Git的基本操作 &#x1f4c2;…

如何做到三天内完成智能直流伺服电机系统开发?

适应EtherCAT/CANopen协议三相伺服电机直流伺服电机直线伺服音圈电机 如何开发高性能直流伺服电机驱动控制器&#xff1f; 需要熟悉高性能单片机&#xff08;至少是ARM或DSP水平的&#xff09;&#xff0c;需要掌握空间磁场矢量控制FOC&#xff0c;需要掌握运动轨迹算法……此…

Order By Limit不稳定性

文章目录 前置解决不确定性场景1 Order By索引1.1 背景1.2 不确定性产生原因1.2.1 正常情况下1.2.2 但是 1.3 补充1.4 场景1总结 场景2 Order by id2.1 背景2.2 不会产生不确定性原因1原因2 2.3 推荐使用方式 场景3 filesort3.1 背景3.2 不确定性产生原因3.3 内存排序和磁盘临时…

【监控】grafana图表使用快速上手

目录 1.前言 2.连接 3.图表 4.job和path 5.总结 1.前言 上一篇文章中&#xff0c;我们使用spring actuatorPrometheusgrafana实现了对一个spring boot应用的可视化监控。 【监控】Spring BootPrometheusGrafana实现可视化监控-CSDN博客 其中对grafana只是打开了一下&am…

【前端素材】推荐优质后台管理系统Welly平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

Vue3 学习笔记(Day4)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. Vue3 学习笔记&#xff08;Day1&#xff09; 2. Vue3 学习笔记&#xff08;Day2&…

探索Java11新世界:JDK 11新特性详解

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

高频面试题整理(一)

文章目录 平台无关性如何实现&#xff1f;JVM如何加载 .class文件&#xff1f;什么是反射?谈谈ClassLoader谈谈类的双亲委派机制类的加载方式Java的内存模型?JVM内存模型-jdk8程序计数器&#xff1a;Java虚拟机栈局部变量表和操作数栈&#xff1a; Java内存模型中堆和栈的区别…

153.寻找旋转排序数组中的最小值(二分查找)

一、题目 . - 力扣&#xff08;LeetCode&#xff09; 153. 寻找旋转排序数组中的最小值 二、代码 class Solution { public:int findMin(vector<int>& nums) {int left 0;int right nums.size()-1;int mid (leftright)/2;while(left<right){if(nums[mid]>…