R语言聚类分析-K均值聚类与系统聚类法

news2025/1/13 13:17:23

一、数据集为firm.csv,给出了22家美国公用事业公司的相关数据集,各数据集变量的名称和含义如下:X1为固定费用周转比(收入/债务),X2为资本回报率,X3为每千瓦容量成本,X4为年载荷因子,X5为1974-1975年高峰期千瓦时增长需求,X6为销售量(年千瓦时用量),X7为核能所占百分比。

X1X2X3X4X5X6X7
1.069.215154.41.690770
0.8910.320257.92.2508825.3
1.4315.4113533.492120
1.0211.2168560.3642334.3
1.498.819251.21330015.6
1.3213.511160-2.21112722.5
1.2212.217567.62.276420
1.19.2245573.3130820
1.341316860.47.284060
1.1212.4197532.7645539.2
0.757.517351.56.5174410
1.1310.9178623.761540
1.1512.719953.76.4717950.2
1.09129649.81.496730
0.967.616462.2-0.164680.9
1.169.9252569.2159910
0.766.413661.9957148.3
1.0512.615056.72.7101400
1.1611.710454-2.1135070
1.211.814859.93.5728741.1
1.048.6204613.566500
1.079.317454.35.91009326.6

二、导入分析包和数据集,指定数据集的变量类型

library(ggplot2)
library(ggpubr)
install.packages('ggpubr')
library(ggpubr)
firm<-read.csv('f:\\桌面\\firm.csv',colClasses = c(rep('numeric',7)))
firm

三、对数据进行标准化

stdfirm<-scale(firm,center=T,scale=T)
stdfirm

运行得到:

stdfirm<-scale(firm,center=T,scale=T)
> stdfirm
               X1          X2           X3          X4          X5          X6         X7
 [1,] -0.29315791 -0.68463896 -0.417122002 -0.57771516 -0.52622751  0.04590290 -0.7146294
 [2,] -1.21451134 -0.19445367  0.821002037  0.20683629 -0.33381191 -1.07776413  0.7920476
 [3,]  1.71214073  2.07822360 -1.339645796 -0.89153574  0.05101929  0.08393124 -0.7146294
 [4,] -0.50994695  0.20660702 -0.004413989 -0.21906307 -0.94312798 -0.70170610  1.3280197
 [5,]  2.03732429 -0.86288816  0.578232617 -1.29501935 -0.71864311 -1.58142837  0.2143888
 [6,]  1.11597086  1.23153991 -1.388199680  0.67756716 -1.74485965  0.62337028  0.6253007
 [7,]  0.57399826  0.65223002  0.165524604  2.38116460 -0.33381191 -0.35832428 -0.7146294
 [8,] -0.07636887 -0.68463896  1.864910540  0.00509449  0.01895002  1.17407698 -0.7146294
 [9,]  1.22436538  1.00872841 -0.004413989  0.76723019  1.26965142 -0.14311204 -0.7146294
[10,]  0.03202565  0.74135462  0.699617327 -0.89153574 -0.17346558 -0.69269198  1.6198267
[11,] -1.97327298 -1.44219805  0.116970720 -1.22777208  1.04516655  2.40196983 -0.7146294
[12,]  0.08622291  0.07292013  0.238355430  1.12588228  0.14722709 -0.77748109 -0.7146294
[13,]  0.19461744  0.87504152  0.748171211 -0.73462545  1.01309729 -0.48874740  2.2749037
[14,] -0.13056613  0.56310542 -1.752353809 -1.60883993 -0.59036605  0.21379097 -0.7146294
[15,] -0.83513051 -1.39763576 -0.101521757  1.17071379 -1.07140505 -0.68902999 -0.6610322
[16,]  0.24881470 -0.37270287  2.034849134 -0.21906307  1.91103676  1.99351729 -0.7146294
[17,] -1.91907572 -1.93238335 -0.781276132  1.10346652  1.84689822 -0.90142531 -0.2203441
[18,] -0.34735517  0.83047922 -0.441398944 -0.06215278 -0.17346558  0.34534086 -0.7146294
[19,]  0.24881470  0.42941852 -1.558138274 -0.66737818 -1.71279038  1.29379583 -0.7146294
[20,]  0.46560374  0.47398082 -0.489952828  0.65515141  0.08308855 -0.45832473  1.7329764
[21,] -0.40155243 -0.95201276  0.869555920  0.90172472  0.08308855 -0.63776215 -0.7146294
[22,] -0.23896065 -0.64007666  0.141247662 -0.60013092  0.85275095  0.33210137  0.8694658
attr(,"scaled:center")
         X1          X2          X3          X4          X5          X6          X7 
   1.114091   10.736364  168.181818   56.977273    3.240909 8914.045455   12.000000 
attr(,"scaled:scale")
          X1           X2           X3           X4           X5           X6           X7 
   0.1845112    2.2440494   41.1913495    4.4611478    3.1182503 3549.9840305   16.7919198 

四、进行K均值聚类分析

指定类别K=3,最低迭代次数为99次,进行25次随机初始化。

stdfirm.kmeans<-kmeans(stdfirm,centers=3,iter.max=99,nstart = 25)

查看聚类的结果:

names(stdfirm.kmeans)

1、stdfirm.kmeans$cluster

得到聚类结果:

stdfirm.kmeans$cluster
 [1] 3 3 2 3 3 2 3 1 3 3 1 3 3 2 3 1 3 2 2 3 3 3

2、stdfirm.kmeans$centers

得到聚类后的3个中心

stdfirm.kmeans$centers
          X1         X2        X3         X4          X5         X6         X7
1 -0.6002757 -0.8331800  1.338910 -0.4805802  0.99171778  1.8565214 -0.7146294
2  0.5198010  1.0265533 -1.295947 -0.5104679 -0.83409247  0.5120458 -0.4466434
3 -0.0570127 -0.1880876  0.175929  0.2852914  0.08537922 -0.5806995  0.3126504

3、stdfirm.kmeans$totss

得到总平方和

stdfirm.kmeans$totss
[1] 147

4、stdfirm.kmeans$tot.withinss

得到组内平方和

 stdfirm.kmeans$tot.withinss
[1] 92.53055

5、stdfirm.kmeans$betweenss

得到组间平方和

6、stdfirm.kmeans$size

得到各类别的观测数

stdfirm.kmeans$size
[1]  3  5 14

7、将聚类结果保存在原始数据集firm.csv中

stdfirm.kmeans.cluster<-stdfirm.kmeans$cluster
stdfirmcluster<-data.frame(firm,cluster=stdfirm.kmeans.cluster)
stdfirmcluster

运行得到:

7、聚类结果可视化

绘制出变量X1和X2,X3和X4,X5和X6样本散点图,并保存在文档中。

本次聚类分析中指定了聚类中心为K=3

pdf('f:/桌面/stdfirm.kmeans.pdf')
p1<-ggplot(stdfirmcluster,aes(x=X1,y=X2,shape=as.factor(cluster)))+
geom_point()+scale_shape_manual(values = c('circle','square','triangle'))
p2<-ggplot(stdfirmcluster,aes(x=X3,y=X4,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values = c('circle','square','triangle'))
p3<-ggplot(stdfirmcluster,aes(x=X5,y=X6,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values = c('circle','square','triangle'))
ggarrange(p1,p2,p3,ncol=2,nrow = 2,common.legend=T)
dev.off()

运行得到:

五、进行系统聚类分析

1、使用系统聚类函数hclust()进行聚类分析,默认使用各样本的距离矩阵,指定使用平均距离法

firm_hclust<-hclust(dist(stdfirm),method='average')

2、绘制聚类树形图:

plot(firm_hclust)

3、指定聚类数为3,并在聚类树中标注出来

firm.hlust.cluster<-cutree(firm_hclust,k=3)
rect.hclust(firm_hclust,k=3)

4、得到聚类结果

 firm.hlust.cluster<-cutree(firm_hclust,k=3)
> firm.hlust.cluster
 [1] 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 3 1 1 1 1 1

5、将聚类结果加到原始数据集中

firmhlustcluster<-data.frame(firm,cluster=firm.hlust.cluster)
firmhlustcluster

6、聚类结果可视化

绘制出变量X1和X2,X3和X4,X5和X6样本散点图,并保存在文档中。

pdf('f:/桌面/firm_cluster.pdf')
p4<-ggplot(firmhlustcluster,aes(x=X1,y=X2,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values=c('circle','square','triangle'))
p5<-ggplot(firmhlustcluster,aes(x=X3,y=X4,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values=c('circle','square','triangle'))
p6<-ggplot(firmhlustcluster,aes(x=X5,y=X6,shape=as.factor(cluster)))+
  geom_point()+scale_shape_manual(values=c('circle','square','triangle'))
ggarrange(p4,p5,p6,ncol=2,nrow = 2,common.legend=T)
dev.off()

六、使用R软件程序包NbClust进行聚类分析,程序包中的NbClust()函数提供最佳类别数的30种统计方法,综合各种最佳类别数的统计指标来给出最佳类别数的判断,下面是初步的介绍。

这里的聚类方法可以是Kmeans,也可以是系统聚类法中的average。

install.packages('NbClust')
library(NbClust)

1、NbClust()函数进行K均值聚类分析

firm.nbclust.kmeans<-NbClust(stdfirm,method='kmeans')

运行得到:

firm.nbclust.kmeans<-NbClust(stdfirm,method='kmeans')
*** : The Hubert index is a graphical method of determining the number of clusters.
                In the plot of Hubert index, we seek a significant knee that corresponds to a 
                significant increase of the value of the measure i.e the significant peak in Hubert
                index second differences plot. 
 
*** : The D index is a graphical method of determining the number of clusters. 
                In the plot of D index, we seek a significant knee (the significant peak in Dindex
                second differences plot) that corresponds to a significant increase of the value of
                the measure. 
 
******************************************************************* 
* Among all indices:                                                
* 4 proposed 2 as the best number of clusters 
* 4 proposed 3 as the best number of clusters 
* 6 proposed 4 as the best number of clusters 
* 1 proposed 5 as the best number of clusters 
* 1 proposed 6 as the best number of clusters 
* 1 proposed 8 as the best number of clusters 
* 1 proposed 13 as the best number of clusters 
* 5 proposed 15 as the best number of clusters 

                   ***** Conclusion *****                            
 
* According to the majority rule, the best number of clusters is  4 
 
 
******************************************************************* 
Warning messages:
1: In pf(beale, pp, df2) : 产生了NaNs
2: In pf(beale, pp, df2) : 产生了NaNs
3: In pf(beale, pp, df2) : 产生了NaNs

上面的说明According to the majority rule, the best number of clusters is 4,大多数的类别判别指标给出的类别结果为4个类别。

需要说明的是Hubert index和 D index可以使用图形来进行类别判别,运行得到的图像为:

第二张图即为这两个指标的二阶差分图,从判别指标的二阶差分图中的峰值即可判别最佳类别数为4个类别。

2、查看firm.nbclust.kmeans均值聚类分析的结果

names(firm.nbclust.kmeans)

运行得到:

names(firm.nbclust.kmeans)
[1] "All.index"          "All.CriticalValues" "Best.nc"            "Best.partition"   

firm.nbclust.kmeans$All.index

该命令给出了各类别判别指标在各类别下的指标值。

firm.nbclust.kmeans$Best.nc

该命令给出了各判别指标给出了具体的最佳类别判别数和在该类别下的判别指标值

irm.nbclust.kmeans$Best.partition

给出来最佳判别数下的给样本所属的类别

firm.nbclust.kmeans$Best.partition
 [1] 2 1 2 1 1 2 4 3 4 1 3 4 1 2 4 3 4 2 2 1 4 1

3、把聚类结果加入到原始数据中

firm.nbclust.kmeans.cluster<-firm.nbclust.kmeans$Best.partition
firmnbclusterkmeans<-data.frame(firm,cluster=firm.nbclust.kmeans.cluster)
firmnbclusterkmeans

4、使用NbClust()函数进行系统聚类分析

firm.nbclust.average<-NbClust(stdfirm,method='average')

 According to the majority rule, the best number of clusters is  3 

此次进行聚类分析,得到最佳的类别为3个类别。

把距离结果加入在原始数据中

firm.nbclust.average.cluster<-firm.nbclust.average$Best.partition
firmnbclusteraverage<-data.frame(firm,cluster=firm.nbclust.average.cluster)
firmnbclusteraverage

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

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

相关文章

YOLOv9详解

1.概述 在逐层进行特征提取和空间转换的过程中&#xff0c;会损失大量信息&#xff0c;例如图中的马在建模过程中逐渐变得模糊&#xff0c;从而影响到最终的性能。YOLOv9尝试使用可编程梯度信息PGI解决这一问题。 具体来说&#xff0c; PGI包含三个部分&#xff0c;&#xff0…

LeetCode每日一题[C++]-310.最小高度树

题目描述 树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的树&#xff0c;标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表&#xff08;每一个…

数据过滤的练习

定义一个集合&#xff0c;并添加一些整数1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#xff0c;7&#xff0c;8&#xff0c;9&#xff0c;10&#xff0c;过滤奇数&#xff0c;只留下偶数&#xff0c;并将结果保存起来。 package MyStream;import j…

SAP Activate项目管理方法论路线图

SAP Activate 是 SAP 推出的一种基于敏捷方法论的灵活、快速且引导式的实施方法论&#xff0c;专为加速SAP S/4HANA和其他SAP解决方案的部署而设计。这个方法论结合了最佳实践、引导配置和方法论本身的强大能力&#xff0c;以确保项目的快速实施和成功部署。SAP Activate的核心…

MySQL中出现‘max_allowed_packet‘ variable.如何解决

默认情况下&#xff0c;MySQL的max_allowed_packet参数可能设置得相对较小&#xff0c;这对于大多数常规操作来说足够了。但是&#xff0c;当你尝试执行包含大量数据的操作&#xff08;如大批量插入或大型查询&#xff09;时&#xff0c;可能会超过这个限制&#xff0c;从而导致…

Bit的下载及安装和错误解决方案

文章目录 一、Git初识二、Git安装三、使用四、*可能出现的问题及解决方案1、vscode中没有Git Bash 一、Git初识 1、概念&#xff1a;一个免费开源、分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 2、作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#x…

(官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell

前言 查了很多资料都不靠谱&#xff0c;在安装过程中遇到很多的坑&#xff0c;mangoDB 服务重视起不来&#xff1b;出现了很多难以解决的报错&#xff0c;现在把安装过程中遇到的问题&#xff0c;和如何闭坑说一下&#xff0c;很多时候都是准备工作不足导致的&#xff1b;很多方…

【论文笔记合集】ARIMA 非平稳过程通过差分转化为平稳过程

本文作者&#xff1a; slience_me 文章目录 ARIMA 非平稳过程通过差分转化为平稳过程文章原文具体解释详解参照 ARIMA 非平稳过程通过差分转化为平稳过程 文章原文 Many time series forecasting methods start from the classic tools [38, 10]. ARIMA [7, 6] tackles the fo…

【C/C++】C/C++招聘信息管理系统(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

多线程(代码案例: 单例模式, 阻塞队列, 生产者消费者模型,定时器)

设计模式是什么 类似于棋谱一样的东西 计算机圈子里的大佬为了能让小菜鸡的代码不要写的太差 针对一些典型的场景, 给出了一些典型的解决方案 这样小菜鸡们可以根据这些方案(ACM里面叫板子, 象棋五子棋里叫棋谱, 咱这里叫 设计模式), 略加修改, 这样代码再差也差不到哪里去 … …

phpstudy搭建简单渗透测试环境upload-labs、DVWA、sqli-labs靶场

好久没有做渗透相关的试验了&#xff0c;今天打开phpstudy发现很多问题&#xff0c;好多环境都用不了&#xff0c;那就卸载重装吧&#xff0c;顺便记录一下。 小皮下载地址&#xff1a; https://www.xp.cn/download.html 下载安装完成 一、下载搭建upload-labs环境 github…

基于Linux内核的共享内存C语言示例

本篇文章用C语言完成这样一个功能&#xff1a;创建一块共享内存&#xff0c;然后开辟2个进程。用户在后台控制父进程&#xff0c;输入字符串&#xff0c;父进程会往共享内存里写这段内容。子进程每秒钟去读一次共享内存的内容&#xff0c;然后将读到的内容打印出来。全篇使用C语…

030—pandas 对数据透视并将多层索引整合为一列

使用步骤 读入数据 代码如下&#xff08;示例&#xff09;&#xff1a; import pandas as pd import random guojia [中国,美国,英国,加拿大] shuiguo [火龙果,西瓜,苹果,梨子] nianfen [2012,2014,2016,2015,2013] df pd.DataFrame({国家: [random.choice(guojia) for …

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Search)

搜索框组件&#xff0c;适用于浏览器的搜索内容输入框等应用场景。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Search(options?: { value?: string, placeholder?: Reso…

MySQL | 表的约束

目录 1. 空属性 NULL 2. 默认值 DEFAULT 3. 列描述comment 4. zerofill 5. 主键 PRIMARY KEY 6. 自增长AUTO_INCREMENT 7. 唯一键UNIQUE 8. 外键 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数…

P1881 绳子对折

题目描述 FJ 有一个长度为 L&#xff08;1≤L≤10,000&#xff09;的绳子。这个绳子上有 N&#xff08;1≤N≤100&#xff09;个结&#xff0c;包括两个端点。FJ 想将绳子对折&#xff0c;并使较短一边的绳子上的结与较长一边绳子上的结完全重合&#xff0c;如图所示&#xff…

MyBatisPlus 之一:Spring 整合 MyBatisPlus 及雪花算法

1. Mybatis-Plus简介 Mybatis-Plus&#xff08;简称MP&#xff09;是一个 Mybatis 的增强工具&#xff0c;在 Mybatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。这是官方给的定义&#xff0c;关于mybatis-plus的更多介绍及特性&#xff0c;可以参考http…

腾讯云有免费服务器吗?在哪领取?

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

力扣经典题:删除字符使字符串变好

char* makeFancyString(char* s) {int sizestrlen(s);char*arr(char*)malloc(sizeof(char)*size1);if(size<3){return s;}arr[0]s[0];arr[1]s[1];int p2;for(int j2;j<size;j){if(s[j]!s[j-1]||s[j]!s[j-2]){arr[p]s[j];p;}}arr[p]\0;return arr; } 此代码的细节很多&am…

小车倒立摆系统能控和能观性分析

一、能控性 系统的能控性&#xff08;Controllability&#xff09;是控制理论中的一个基本概念&#xff0c;它描述了系统状态是否能够在有限时间内&#xff0c;通过适当设计的输入&#xff08;或控制信号&#xff09;&#xff0c;从任何初始状态转移到任何期望的最终状态。如果…