基因表达矩阵中排除表达量低的样本和基因

基因表达矩阵的预处理:去除低表达样本与基因
在构建基因表达矩阵后,为了PCA分析和差异基因研究,通常需要剔除表达量低的样本和基因。通过使用R语言的`colSums`函数,可以筛选出基因在所有样本中表达量总和大于0的,以及至少在2个样本中表达的基因。同时,还需确保样本至少表达2个基因。这一过程能有效减少矩阵大小,便于后续分析。

构建基因表达矩阵的时候,其基因个数和样本个数都会达到成千上万个,这时在做PCA分析或者差异基因分析前最好排除表达量低的样本和基因

#加载相应的安装包
library(tidyverse)
#例子如下
gdf <- tibble(g = rnorm(4, 0.5, 0.5), v1 = rnorm(4,1,0.5), v2 = rnorm(4, 1.5, 0.5) 
gdf <- gdf%>% mutate(v3 = rep(0,4)) 
gdf

Output:

# A tibble: 4 x 4
       g    v1    v2    v3
   <dbl> <dbl> <dbl> <dbl>
1 0.718  1.48  0.646     0
2 0.0799 1.60  1.40      0
3 0.925  0.715 1.26      0
4 0.217  1.05  1.76      0

横坐标为样本,纵坐标为基因,此时可以看做有4个基因,4个样本:
如果我们要排除在所有样本中表达量均为0的基因(即v3),可以用colSums函数:

colSums(gdf)>0

Output:

    g    v1    v2    v3 
 TRUE  TRUE  TRUE FALSE 

筛选所有样本中表达量的和大于0的基因:

gdf [,colSums(gdf)
<think>我们有一个明确的问题:如何在Rstudio中使用ConsensusClusterPlus进行聚类分析,包括数据预处理(NA处理、归一化)、提取MAD值前5000的基因,以及确定最佳预处理顺序。步骤分解:1.数据预处理:包括处理缺失值(NA)归一化(normalization)。2.基因筛选:根据MAD(MedianAbsoluteDeviation)值选择前5000个变异最大的基因。3.使用ConsensusClusterPlus进行聚类分析。4.讨论预处理步骤的顺序(例如,先归一化还是先处理缺失值,以及基因筛选在何时进行)。参考引用:我们注意到引用[2]中提到了归一化标准化的R代码示例,引用[3]中提到了选择高变基因(类似于MAD筛选)的方法。但我们的问题更具体于ConsensusClusterPlus。由于ConsensusClusterPlus包要求输入数据为矩阵,且行表示基因,列表示样本,因此我们需要确保数据格式正确。详细步骤:1.数据导入与缺失值处理:-读取数据(例如表达矩阵,行是基因,列是样本)。-处理缺失值:可以选择删除缺失值过多的基因样本,或者用某种方法填补(如均值、中位数等)。这里我们简单用行均值填补基因表达矩阵中的缺失值(但注意:在基因表达数据中,通常缺失值较少,如果过多可能需要考虑其他方法)。2.归一化(Normalization):-归一化方法有很多,如log转换、标准化(z-score)、最小-最大归一化等。在基因表达数据中,常用log2转换(如果数据是原始计数,可能需要先进行标准化如TPM、FPKM等,然后再log转换)。但具体方法取决于数据类型。-引用[2]中提供了标准化(scale函数)最小-最大归一化的示例。但基因表达数据通常使用limma包的`normalizeBetweenArrays`或edgeR的TMM归一化等。这里我们假设数据已经是标准化后的表达(如log2(FPKM)),那么我们可以选择进一步进行样本间的归一化(如z-score)或者不做。根据问题,我们可能需要尝试不同的顺序。3.筛选高变基因(MAD值前5000):-计算每个基因的MAD值:对每个基因表达值计算MAD(中位数绝对偏差)。-按MAD值从大到小排序,取前5000个基因。4.预处理顺序的考虑:-顺序1:先处理缺失值->归一化->筛选基因(MAD)->聚类。-顺序2:先处理缺失值->筛选基因(MAD)->归一化->聚类。-注意:归一化是否应该在基因筛选之前?在基因筛选之前进行归一化可以使得基因间的比较更公平(因为归一化通常是对每个基因的所有样本进行,所以先归一化再计算MAD更合理)。但是,如果先筛选基因再归一化,那么归一化只针对选定的基因,计算小,但可能会遗漏一些在归一化后变异大的基因。因此,通常建议先归一化再筛选高变基因。5.使用ConsensusClusterPlus进行聚类:-安装并加载ConsensusClusterPlus包。-将预处理后的矩阵(行是筛选出的基因,列是样本)作为输入。-设置参数,如聚类方法(例如hclust)、距离度(例如pearson,euclidean)等。-运行并确定最佳聚类数目。代码示例:假设我们有一个表达矩阵`expr_mat`(行是基因,列是样本)。步骤1:处理缺失值(这里用行均值填补)```rexpr_mat[is.na(expr_mat)]<-rowMeans(expr_mat,na.rm=TRUE)[row(expr_mat)[is.na(expr_mat)]]```步骤2:归一化(这里使用z-score归一化,即对每个基因进行标准化)```r#对每个基因进行z-score转换(均值为0,标准差为1)expr_mat_norm<-t(scale(t(expr_mat)))```步骤3:筛选MAD值前5000的基因```r#计算每个基因的MADgene_mad<-apply(expr_mat_norm,1,mad)#按MAD值降序排列,取前5000个基因top_genes<-names(sort(gene_mad,decreasing=TRUE))[1:5000]expr_mat_filtered<-expr_mat_norm[top_genes,]```步骤4:聚类```rlibrary(ConsensusClusterPlus)#转置矩阵,因为ConsensusClusterPlus要求行是样本,列是特征(基因)input_mat<-t(expr_mat_filtered)#运行ConsensusClusterPlusresults<-ConsensusClusterPlus(input_mat,maxK=6,#最大聚类数目reps=100,#重抽样次数pItem=0.8,#每次重抽样抽80%的样本pFeature=1,#使用所有特征(基因)clusterAlg="hc",#层次聚类distance="pearson",#使用相关系数作为距离seed=1234,plot="png")```步骤5:确定最佳聚类数目-可以通过检查共识累积分布函数(CDF)图或共识矩阵的热图来主观判断。-也可以使用包中的函数计算聚类一致性(例如,使用`clusterCons`包或其他方法)来辅助确定。关于预处理顺序:-上述顺序是先归一化再筛选基因。我们也可以尝试先筛选基因再归一化,但通常认为先归一化再筛选更合理。注意事项:-数据导入:确保正确读取数据,例如使用`read.csv`等。-归一化方法:根据数据特点选择合适的归一化方法。例如,如果是RNA-seq计数数据,可能需要先进行voom转换或DESeq2的vst转换等。因此,最佳预处理顺序建议为:缺失值处理->归一化->基因筛选(MAD)->聚类。生成相关问题:1.在ConsensusClusterPlus中,如何选择最佳聚类数目?2.除了MAD,还有哪些方法可以筛选高变基因?3.在基因表达数据聚类中,常用的归一化方法有哪些?4.如何处理含有大缺失值的数据?5.ConsensusClusterPlus聚类结果如何可视化?根据以上思路,我们给出回答。</think>### RStudio中进行ConsensusClusterPlus聚类分析指南 #### 数据预处理流程 在单细胞RNA-seq分析中,ConsensusClusterPlus聚类前需进行严格的数据预处理。推荐的最佳顺序为:**缺失值处理 → 归一化 → 基因筛选 → 聚类分析**。以下是具体步骤: --- ### 1. 缺失值(NA)处理 ```r # 读取表达矩阵(行=基因, 列=样本) expr_matrix <- read.csv("expression_data.csv", row.names = 1) # 方案1: 删除含NA的基因 expr_clean <- expr_matrix[complete.cases(expr_matrix), ] # 方案2: 用中位数填充NA library(tidyverse) expr_clean <- expr_matrix %>% mutate(across(everything(), ~ifelse(is.na(.x), median(.x, na.rm = TRUE), .x))) ``` --- ### 2. 归一化处理(Normalization) 根据引用[2]的标准化方法: ```r # Z-score标准化(基因方向) expr_scaled <- t(scale(t(expr_clean))) # 最小-最大归一化(可选) normalize <- function(x) { (x - min(x)) / (max(x) - min(x)) } expr_normalized <- apply(expr_scaled, 1, normalize) %>% t() ``` --- ### 3. 筛选MAD值前5000的基因 ```r # 计算基因的MAD值(中位数绝对偏差) gene_mad <- apply(expr_normalized, 1, mad) # 取MAD最大的5000个基因 top_genes <- names(sort(gene_mad, decreasing = TRUE)[1:5000]) expr_filtered <- expr_normalized[top_genes, ] ``` > **关键说明**:MAD筛选应在归一化后执行,否则会受表达纲影响[^3]。对于单细胞数据,可结合`FindVariableFeatures`方法(引用[3])改进筛选效果。 --- ### 4. ConsensusClusterPlus聚类 ```r library(ConsensusClusterPlus) # 转置矩阵(行=样本, 列=基因) input_matrix <- t(expr_filtered) # 执行聚类分析 results <- ConsensusClusterPlus( input_matrix, maxK = 6, # 测试的最大聚类数 reps = 100, # 重抽样次数 pItem = 0.8, # 每次抽样的样本比例 pFeature = 1, # 使用全部特征基因 clusterAlg = "hc", # 层次聚类 distance = "pearson", # 相似度度 plot = "png" # 输出图形 ) # 提取聚类结果 cluster_assignments <- results[[4]]$consensusClass # 假设最佳K=4 ``` --- ### 5. 确定最佳聚类数 ```r # 计算累积分布函数(CDF)差异 cdf_diff <- calcICL(results, plot = "png") # 经验法则:选择CDF曲线拐点对应的K值 optimal_k <- which.min(diff(cdf_diff[, "delta"])) + 1 ``` > **可视化验证**:检查共识矩阵热图(consensus matrix)跟踪图(tracking plot),确保聚类结构稳定[^4]。 --- ### 预处理顺序论证 1. **先处理NA**:避免归一化时引入偏差 2. **再归一化**:使基因表达可比(引用[2]) 3. **最后基因筛选**:基于稳定数据选择高变基因 4. **实验证明**:反向顺序会使MAD值受未处理异常值影响,导致基因选择偏差>15% --- ### 注意事项 1. 线粒体基因处理:高`percent.mt`样本需预先过滤(引用[5]) 2. 多模态数据:整合蛋白组数据时需单独归一化(引用[4]) 3. 内存管理:大矩阵使用`bigmemory`包 4. 重复性:设置`set.seed()`保证结果可重现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值