ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
122 stars 30 forks source link

R语言机器学习系列|使用Mfuzz包进行基因表达时间趋势分析并聚类分群 #3604

Closed ixxmu closed 1 year ago

ixxmu commented 1 year ago

https://mp.weixin.qq.com/s/wi8eR2iuhbWge5UGs2nQGA

ixxmu commented 1 year ago

R语言机器学习系列|使用Mfuzz包进行基因表达时间趋势分析并聚类分群 by 科研生信充电宝

R语言机器学习系列

R

使用Mfuzz包进行基因表达时间趋势分析并聚类分群

- 07·09-

宜分享

使用Mfuzz包进行基因表达时间趋势分析并聚类分群

Brief Introduction

01

Mfuzz包简介:

什么是Mfuzz包?

Mfuzz包是一个用于模糊聚类(Fuzzy clustering)的R包,它提供了一套强大的工具,用于对基因表达数据进行聚类分析。模糊聚类是一种聚类方法,它允许样本在不同聚类簇之间具有模糊的隶属度,而不是严格地分配到一个确定的聚类簇中。

Mfuzz包的主要功能包括以下几个方面:

  1. 模糊C均值聚类算法(Fuzzy c-means clustering):Mfuzz包实现了模糊C均值聚类算法,它是一种常用的模糊聚类算法。该算法通过最小化样本与聚类中心之间的距离,将样本分配到不同聚类簇中。在模糊C均值聚类中,每个样本可以属于多个聚类簇,而不是严格地属于一个特定的聚类簇。

  2. 模糊聚类评估:Mfuzz包提供了一些方法来评估模糊聚类的质量。例如,可以使用模糊聚类分配矩阵(Fuzzy clustering allocation matrix)来度量样本在不同聚类簇之间的隶属度。此外,还可以计算模糊分割矩阵(Fuzzy partition matrix)和模糊鸢尾图(Fuzzy silhouette plot)来评估聚类的紧密性和分离性。

  3. 可视化工具:Mfuzz包提供了一些可视化工具,用于直观地展示模糊聚类的结果。例如,可以绘制模糊聚类图形(Fuzzy clustering plots)来可视化聚类簇之间的相似性和差异性。还可以绘制基因的模糊聚类图(Fuzzy clustering heatmaps)来展示基因表达模式。

模糊聚类在基因表达数据分析中具有广泛的应用。它可以帮助我们发现基因表达的模式和结构,识别不同条件下的表达模式相似的基因群,以及探索样本之间的相似性和差异性。


您可以根据Mfuzz包的官方文档:

https://www.bioconductor.org/packages/release/bioc/html/Mfuzz.html

和官方网站:

http://mfuzz.sysbiolab.eu

进一步了解Mfuzz包的功能和用法。这些资源将提供更详细的信息,包括函数的参数和用法示例。


02

模糊C均值聚类算法简介:

模糊C均值聚类算法(Fuzzy c-means clustering)是一种常用的模糊聚类算法,用于将样本分配到不同聚类簇中。与传统的硬聚类方法(如k-means聚类)不同,模糊C均值聚类允许样本具有模糊的隶属度,即一个样本可以属于多个聚类簇,而不是严格地属于一个特定的聚类簇。


模糊C均值聚类算法的原理如下:

  1. 初始化:随机选择聚类中心(也称为原型向量)和一个模糊性指数(m)。

  2. 计算样本的隶属度:对于每个样本,计算它对于每个聚类中心的隶属度。隶属度表示样本属于每个聚类的程度,通常使用模糊隶属度矩阵(fuzzy membership matrix)来表示。

  3. 更新聚类中心:根据样本的隶属度,更新每个聚类中心的值,以使其更好地代表属于该聚类的样本。

  4. 重复步骤2和步骤3,直到满足停止准则(例如最大迭代次数或聚类中心的变化小于某个阈值)。

在模糊C均值聚类中,模糊性指数(m)是一个控制模糊程度的参数,通常取大于1的值。较大的m值会导致更模糊的隶属度分配,即样本可以在多个聚类中心之间具有较高的隶属度。


模糊C均值聚类算法的优势包括:

  1. 模糊隶属度:与硬聚类方法相比,模糊C均值聚类可以提供样本属于不同聚类的程度,而不是仅仅给出样本所属的唯一聚类。

  2. 对噪声和异常值的鲁棒性:由于模糊隶属度的存在,模糊C均值聚类对于噪声和异常值相对较为鲁棒,能够更好地处理这些数据的影响。

  3. 适用于数据不确定性建模:模糊C均值聚类适用于需要考虑数据不确定性的情况,能够更好地反映数据的模糊性和多样性。

  4. 软划分结果的解释性:模糊C均值聚类可以提供对样本所属聚类的模糊程度的信息,使结果更具解释性和可解释性。

然而,模糊C均值聚类也存在一些挑战和限制,包括对初始聚类中心的敏感性、计算复杂度较高以及难以处理大规模数据集等。

总而言之,模糊C均值聚类是一种强大的聚类方法,可以用于处理样本属于多个聚类的情况,提供更多样化和模糊化的聚类结果。它在基因表达数据分析和其他领域中都具有广泛的应用。


03

在聚类基因或蛋白时为什么使用Mfuzz:

聚类是基因表达数据分析的重要工具,无论是在转录物水平还是在蛋白质水平。


无监督分类通常可以揭示隐藏在基因表达数据集中的结构。目前应用的绝大多数聚类算法,使用的是硬聚类(hard partition),即每个基因或蛋白质被精确地分配到一个聚类。对于可以区分开的数据,硬聚类是合适的。然而,这通常不适应于基因表达数据的情况,其中基因/蛋白质簇经常重叠。此外,硬聚类通常对噪声高度敏感。


软聚类(soft partition)的优势:

  1. 它生成可访问的内部簇结构,即它表明相应的簇如何很好地代表基因/蛋白质。这些附加信息可用于搜索调控元件;

  2. 其次,可以定义cluster之间的整体关系,以及一个全局集群结构;

  3. 此外,软聚类具有更强的噪声鲁棒性,可以避免基因的预过滤。这可以防止从数据分析中排除生物学相关基因/蛋白质;


04

R实例:使用Mfuzz包进行基因表达

时间趋势分析并聚类分群

① 加载和安装包:

现在,我们想要安装Mfuzz包:

# 清除变量rm(list = ls())# 设置路径setwd("D:\\2023_07_09_原创_使用Mfuzz包进行基因表达时间趋势分析并聚类分群")# 得到当前路径getwd()
# 安装Mfuzz包if (!requireNamespace("BiocManager", quietly = TRUE))  install.packages("BiocManager")
BiocManager::install("Mfuzz")# 加载数据包library(Mfuzz)


② 导入基因在不同时间的表达量数据集:

接下来,我们将使用一个示例数据集进行模糊聚类分析。

# 导入xlsx格式数据library(readxl)# 读取xlsx格式文件data <- read_excel("D:\\2023_07_09_原创_使用Mfuzz包进行基因表达时间趋势分析并聚类分群\\gene_expression.xlsx", sheet = 1)# 查看数据前5行head(data)

可以看到我们的数据集是不同基因在Day1、Day15、Day30、Day45、Day60、Day75的表达量。

注意:在导入数据时,应按照这样的结构导入数据,如果每一个样本有多个重复,请先计算平均值后再导入。

接下来,我们美化表格显示数据:

# 加载显示表格的包library(tidyverse)library(broom)library(broom.mixed)library(gt)# 美化输出信息head(data) %>% gt() %>% fmt_auto()


③ 数据格式转换:

接下来,我们将data转为matrix格式,并且基因名作为行名:

# 将第一列作为行名data <- as.data.frame(data, stringsAsFactors = FALSE) # 将数据转换为数据框对象rownames(data)<-data[,1] #将数据框的第一列作为行名data<-data[,-1] #将数据框的第一列删除,只留下剩余的列作为数据head(data) # 将data转为matrixdata <- as.matrix(data)


④ 构建Mfuzz对象并进行预处理:

接下来,我们将构建Mfuzz对象,并处理缺失值或者异常值,最后再标准化数据。

#构建Mfuzz对象mfuzz_class <- new('ExpressionSet',exprs = data)
#预处理缺失值或者异常值mfuzz_class <- filter.NA(mfuzz_class, thres = 0.25)mfuzz_class <- fill.NA(mfuzz_class, mode = 'mean')# 基因过滤mfuzz_class <- filter.std(mfuzz_class, min.std = 0)

过滤阈值是指定的,目前没有严格的过滤程序存在,因此我们避免了对基因数据进行任何先前的过滤。这可以防止可能具有生物学重要性的基因丢失。

#标准化数据mfuzz_class <- standardise(mfuzz_class)


⑤ 使用Mfuzz进行聚类:

接下来,我们将使用一个示例数据集进行模糊聚类分析。

# Mfuzz 基于 fuzzy c-means 的算法进行聚类#需手动定义目标聚类群的个数,例如这里我们设定为 10,即期望获得 10 组聚类群#需要设定随机数种子,以避免再次运行时获得不同的结果set.seed(123)cluster_num <- 10# 将使用mfuzz包中的mfuzz函数进行模糊聚类mfuzz_cluster <- mfuzz(mfuzz_class, c = cluster_num, m = mestimate(mfuzz_class))

注意:对于模糊c均值聚类,需要事先选择m和聚类个数c。


⑥ 聚类结果可视化:

接下来,我们对聚类结果进行可视化展示。

# Mfuzz聚类可视化作图#time.labels 参数设置时间轴,需要和原基因表达数据集中的列对应#颜色、线宽、坐标轴、字体等细节也可以添加其他参数调整,此处略,详见函数帮助mfuzz.plot2(mfuzz_class, cl = mfuzz_cluster, mfrow = c(2, 5), time.labels = colnames(data))

注意:聚类通常用于揭示基因表达的调控机制。众所周知,基因的调节通常不是以on-off的方式进行的,而是以循序渐进的方式进行的,这使得更好控制基因的功能。聚类算法应该能区分基因与主要聚类模式的紧密程度。

软聚类(soft cluster)是这个目的的一个很好的候选方法,因为它可以将基因i 在聚类j中分配一个 membership μijmembership的值可以在0到1之间连续变化。这个特性使得soft cluster能够提供更多关于基因表达数据结构的信息。

对于软聚类(soft cluster),聚类中心Cj是所有聚类成员的加权的结果,显示了聚类的整体表达模式。隶属度μij表示聚类cj对基因i的代表程度。μij值较低表明cj对基因i的表达较差。μij值较大,说明基因i的表达与簇质心cj高度相关。membership μij在mfuzzy .plot生成的图中以颜色编码。这有助于识别基因簇中的时间模式。


⑦ 聚类结果提取:

接下来继续在上述已获得的聚类结果中,提取10个聚类群中包含的gene集合。

7.1 查看每个聚类群中各自包含的gene数量

# 查看每个聚类群中各自包含的gene数量cluster_size <- mfuzz_cluster$sizenames(cluster_size) <- 1:cluster_numcluster_size


7.2 查看每个gene所属的聚类群

#查看每个gene所属的聚类群head(mfuzz_cluster$cluster)


7.3 查看各gene的 membership 值

Mfuzz 通过计算一个叫 membership 的统计量判断蛋白质所属的聚类群,以最大的 membership 值为准

# Mfuzz 通过计算一个叫 membership 的统计量判断蛋白质所属的聚类群,以最大的 membership 值为准# 查看各gene的 membership 值head(mfuzz_cluster$membership)

注意:membership也可以表示向量之间的相似性。如果两个基因表达载体对一个特定的c簇具有较高的membership,则它们通常彼此相似。这是定义集群核心的基础。我们证明membership大于所选阈值α的基因属于聚类的α-核心。


7.4 提取所有gene所属的聚类群导出

#最后,提取所有gene所属的聚类群,并和它们的原始表达值整合在一起gene_cluster <- mfuzz_cluster$clustergene_cluster <- cbind(data[names(gene_cluster), ], gene_cluster)head(gene_cluster)write.csv(gene_cluster, 'gene_cluster.csv')


7.5 提取分析过程中标准化后的表达值并导出

# 提取分析过程中标准化后的表达值(绘制曲线图用的那个值,而非原始蛋白表达值)gene_cluster <- mfuzz_cluster$clustergene_standard <- mfuzz_class@assayData$exprsgene_standard_cluster <- cbind(gene_standard[names(gene_cluster), ], gene_cluster)head(gene_standard_cluster)write.csv(gene_standard_cluster, 'gene_standard_cluster.csv')


现在:


长按扫码关注:科研生信充电宝

10元赞赏本文,即喜欢作者~


即可直接解锁:


《使用Mfuzz包进行基因表达时间趋势分析并聚类分群》全套代码和源文件


看到这里你还不心动吗?


赶紧关注、转发、点赞、分享,领取你的专属福利吧~



好啦,以上就是今天推文的全部内容啦!



今天的分享就到这里啦~


另外,本公众号建立了R语言和Python学习分享群,联系后台,拉您入群。


或直接添加小编,拉您入群:




版权声明:本文内容由互联网用户自发贡献,版权归作者所有,本公众号不拥有所有权,也不承担相关法律责任。

如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:kysxcdb@163.com 进行举报,一经查实,本公众号将立刻删除涉嫌侵权内容。

BIOINFOR

微信号|科研生信充电宝

 · BIOINFOR · 


永远相信美好的事情

即将发生