聚类分析

R中有各种各样的聚类分析函数。本文主要介绍其中的三种方法:层次聚集划分聚类基于模型的聚类

数据准备

聚类分析之前,可以对数据进行预处理,如包括缺失值的处理和数据的标准化。以鸢尾花数据集(iris)为例。

# 数据预处理
mydata <- iris[,1:4]
mydata <- na.omit(mydata) # 删除缺失值
mydata <- scale(mydata) # 数据标准化

Partitioning(划分)

K-means 是我们最常用的基于欧式距离的聚类算法,其认为两个目标的距离越近,相似度越大。需要分析者先确定要将这组数据分成多少类,也即聚类的个数。根据所提取的簇数绘制出组内的平方和,可以帮助确定合适的簇数。

# 探索最佳聚类个数
# 计算不同个数聚类内部的距离平方和
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata,centers=i)$withinss)
plot(1:15, wss, type="b", xlab="Number of Clusters",ylab="Within groups sum of squares")

WSS

WSS下降趋于稳定的聚类数即为我们的最佳聚类。如图,聚类个数为4时满足要求。(3-5都差不多,并没有唯一聚类数)

# K-Means 聚类分析
fit <- kmeans(mydata, 4) # 聚类数为4
# 每个聚类的均值
aggregate(mydata,by=list(fit$cluster),FUN=mean)
# 添加聚类列
mydata_result <- data.frame(mydata, fit$cluster)

层次聚类

R语言提供了丰富的层次聚类函数,这里简单介绍一下用Ward方法进行的层次聚类分析。

层次的聚类方法(Hierarchical Clustering),从字面上理解,其是层次化的聚类,最终得出来的是树形结构。专业一点来说,层次聚类通过 计算不同类别数据点间的相似度 来创建一棵有层次的嵌套聚类树。

层次聚类的好处是不需要指定具体类别数目的,其得到的是一颗树,聚类完成之后,可在任意层次横切一刀,得到指定数目的簇。

聚类数示例
# Ward 层次聚类
d <- dist(mydata, method = "euclidean") #距离矩阵
fit <- hclust(d, method="ward")
plot(fit) # 聚类树


groups <- cutree(fit, k=3) # 将聚类树切成3个聚类
rect.hclust(fit, k=3, border="red")


pvclust包中的pvclust()函数提供了基于多尺度bootstrap重采样的分层聚类的p值。得到数据高度支持的聚类将具有较大的p值。

# Ward Hierarchical Clustering with Bootstrapped p values
library(pvclust)
fit <- pvclust(mydata, method.hclust="ward",method.dist="euclidean")
plot(fit) # dendogram with p values
# add rectangles around groups highly supported by the data
pvrect(fit, alpha=.95)

pvclust

基于模型聚类

基于模型的聚类方法利用极大似然估计法和贝叶斯准则在大量假定的模型中去选择最佳的聚类模型并确定最佳聚类个数。其中,对于参数化高斯混合模型,Mclust包中的Mclust()函数根据分层聚类初始化EM的BIC选择最优模型。

# Model Based Clustering
library(mclust)
fit <- Mclust(mydata)
plot(fit) # plot results
summary(fit) # display the best model

Mclust
> summary(fit) # display the best model
----------------------------------------------------
Gaussian finite mixture model fitted by EM algorithm
---------------------------------------------------- Mclust VVV (ellipsoidal, varying volume, shape, and orientation) model with 2 components: log-likelihood   n df       BIC       ICL-322.6936 150 29 -790.6956 -790.6969Clustering table:1   2 50 100

从上面的结果来看,分为两个聚类效果更好。

聚类可视化

# K-Means Clustering with 5 clusters
fit <- kmeans(mydata, 3)# vary parameters for most readable graph
library(cluster)
clusplot(mydata, fit$cluster, color=TRUE, shade=TRUE,labels=2, lines=0)

clusplot
# Centroid Plot against 1st 2 discriminant functions
install.packages('fpc')
library(fpc)
plotcluster(mydata, fit$cluster)

fpc

参考

  • Quick-R: Cluster Analysis (statmethods.net)(https://www.statmethods.net/advstats/cluster.html)

木舟笔记2022年度VIP企划

权益:

  1. 2022年度木舟笔记所有推文示例数据及代码(在VIP群里实时更新)

  2. 木舟笔记科研交流群

  3. 半价购买跟着Cell学作图系列合集(免费教程+代码领取)|跟着Cell学作图系列合集。

收费:

99¥/人。可添加微信:mzbj0002 转账,或直接在文末打赏。

扫描二维码添加微信

R实战 | 聚类分析相关推荐

  1. R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

    R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据

  2. R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据

    R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据 目录 R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据

  3. R语言聚类分析之层次聚类(hierarchical clustering)实战

    R语言聚类分析之层次聚类(hierarchical clustering)实战 目录 R语言聚类分析之层次聚类(hierarchical clustering)实战 #距离计算

  4. R语言聚类分析--cluster, factoextra

    R语言聚类分析–cluster, factoextra 本文转载自"R语言中文社区",己获授权,宏基因组公众号编辑对内容进行测试.修改及补充. 原文链接:https://mp.we ...

  5. r语言聚类分析_「SPSS数据分析」SPSS聚类分析(R型聚类)的软件操作与结果解读...

    ​ 在上一讲中,我们讲述了针对样本进行聚类的分析方法-Q型聚类.今天我们将详细讲解针对变量数据进行的聚类分析--系统聚类之R型聚类. 我们要将数据变量进行聚类,但不知道要分成几类,或者没有明确的分类指 ...

  6. r型聚类分析怎么做_【SPSS数据分析】SPSS聚类分析(R型聚类)的软件操作与结果解读 ——【杏花开生物医药统计】...

    ​ 在上一讲中,我们讲述了针对样本进行聚类的分析方法-Q型聚类.今天我们将详细讲解针对变量数据进行的聚类分析--系统聚类之R型聚类. 我们要将数据变量进行聚类,但不知道要分成几类,或者没有明确的分类指 ...

  7. R实战 | 环状热图(circos)

    circular_heatmap 「之前画过的热图:」 跟着 Cell 学作图 | 复杂热图(ComplexHeatmap) 跟着 Nature 学作图 | 复杂热图2.0(连续+分类变量) R实战 ...

  8. R实战 | 山脊图(ridgeline plot)

    R实战 | 山脊图(ridgeline plot) 示例数据 library(ggplot2) library(reshape2) # 以基因表达矩阵为例 test = matrix(rnorm(20 ...

  9. R 实战 | 使用clusterProfiler进行多组基因富集分析

    R 实战 | 使用clusterProfiler进行多组基因富集分析 clusterProfiler这个包我就不再介绍了,网上关于用这个包做的基础的富集分析的教程已经非常多了,今天主要介绍一下使用co ...

  10. R实战:【股票分析】用quantmod在股票的K线上添加标记

    R实战系列专栏 源码如下: require(quantmod) s <- structure(c(1300, 1301.349976, 1281.199951, 1316.900024, 131 ...

最新文章

  1. 动态规划1--最长公共子序列
  2. Interview:算法岗位面试—10.12上午—上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现、特征图计算公式
  3. u-boot命令解释
  4. 【转】游戏编程中的人工智能技术--神经网络
  5. 美赛整理之遗传算法优化BP神经网络的齿轮故障诊断问题
  6. POJ2115 C Looooops 扩展欧几里德
  7. 《构建之法》阅读笔记二
  8. 实验4微程序控制器实验
  9. Redis常用命令(超详细整理)
  10. ubuntu下dbus工具d-feet不显示路径和接口
  11. DataTable常用数据筛选方法
  12. 中晋最新消息2020年_油价调整最新消息:今天油价再次创出2020年新低
  13. Android 关于佳博和汉印蓝牙热敏打印机开发,android面试必看书籍
  14. 时序分析 44 -- 时序数据转为空间数据 (三) 格拉姆角场 python 实践 (上)
  15. 墙面有几种装修方法_墙面装修有哪几种常见方法?
  16. 提供一个免费的directui界面库(已开源)
  17. KAPPA领衔实施服装ERP软件树立行业榜样
  18. 建立高效的团队,可以做这七件事
  19. 推荐一个好用的ros plot工具 plot juggler 以及ROS常用的绘图工具
  20. openlayers绘制箭头线

热门文章

  1. FastDFS分布式架构,详细安装步骤,测试;Nginx中配置FastDFS,并提供优化,下载方法,楼主已测
  2. Android多媒体功能开发(7)——使用SoundPool类播放音频
  3. UGUI内核大探究(十)Layout与Fitter
  4. matlab ode45 二阶微分方程,ode45解二阶微分方程
  5. 基于ARM+FPGA低成本高实时Ethercat运动控制器解决方案
  6. 地球是圆的:《世界是平的》
  7. android电视不能root权限,有谁知道安卓电视root权限获取方法?
  8. SAP中计划策略的后台配置框架分析解读
  9. 史上最全电子科技大学858信号与系统考研要了解的常识
  10. php修改音频文件_用php实现mp3音频文件下载功能