简单粗暴!低方差滤波VS高相关滤波,哪个更简单?一招让你的数据变得轻松无比!(上)






简单粗暴!低方差滤波VS高相关滤波,哪个更简单?一招让你的数据变得轻松无比!(上)

小师妹  生信果  2023-09-05 19:00:30


点击蓝字 关注我们

现代高通量技术(如基因芯片和RNA测序)可以同时检测数万个基因或特征,数据维度往往非常高,而且存在大量的冗余信息和噪声。这使得对数据进行可视化、建模和解释变得非常困难。因此在生物信息数据分析中,降维问题一直是重中之重。以往小师妹也发布过许多严谨但稍微复杂降维方法,今天小师妹要带来的是理论和操作都十分直接简单的低方差滤波以及高相关滤波(高相关滤波在下一节哦~大家敬请期待~)


低方差滤波是一种简单而有效的降维方法,通常用于去除表达变化较小的基因或特征,从而减少数据中的噪声和冗余信息。它的基本思想是,如果一个基因在样本中的表达变化较小,那么它对区分不同样本的贡献也较小,可以被过滤掉。


低方差滤波可以用于基因表达数据的预处理,以去除表达变化较小的基因或特征,从而减少数据中的噪声和冗余信息,提高后续的数据分析效果。例如,在差异表达分析中,可以先使用低方差滤波去除表达量较低或变化较小的基因,然后再进行差异分析,从而获得更可靠的分析结果。低方差滤波的效果受到阈值的选择和数据的分布特点的影响。一般来说,阈值越小,保留的基因数量越多,但同时也会保留更多的噪声和冗余信息。因此,在选择阈值时,需要根据具体的数据分布特点和分析目的进行综合考虑,选择适当的阈值,以保留足够的信息,同时去除大部分噪声和冗余信息。


低方差滤波的实现过程通常包括以下几个步骤:

1 计算每个基因在不同样本中的表达量,并计算其方差。

2 对所有基因按照方差从小到大进行排序。

3 根据预设的阈值,选择方差大于阈值的基因,将其保留下来用于后续的数据分析。

4 将保留下来的基因构成一个新的基因集合,用于后续的降维分析或建模。

需要注意的是,低方差滤波并不是一种万能的降维方法,它只适用于那些表达变化较小的基因或特征,而对于表达变化较大的基因或特征,可能会产生较大的误差或信息损失。因此,在使用低方差滤波进行降维时,需要根据具体的数据特点和分析目的,选取适当的方差阈值,并进行必要的数据预处理和验证。

filterByExpr函数是edgeR软件包中的一个函数,用于根据表达量进行低方差滤波,筛选出表达量较高的基因。它接受一个基因表达矩阵X,以及一个样本分组向量group和一个最小表达计数min.count。


在filterByExpr函数中,首先计算每个基因的样本均值和方差,并根据方差值进行排序。然后,根据每个基因的最小表达计数和样本均值和方差之间的关系,确定保留哪些基因。具体来说,如果一个基因在所有样本中的表达量都小于最小表达计数,则该基因被过滤掉;否则,如果一个基因在至少一个组中的表达量大于等于最小表达计数,并且该基因的方差大于等于其均值的平方,那么该基因被保留。


filterByExpr函数返回一个逻辑向量,指示哪些基因应该保留。在使用filterByExpr函数筛选出表达量较高的基因之后,可以使用这个逻辑向量来选择原始基因表达矩阵X中相应的行,从而得到一个滤波后的基因表达矩阵。


今天小师妹以蛋白质表达数据为例,带大家一起试试吧~


首先导入数据,删除缺失值

library(limma)

library(edgeR)


data=read.csv(file.choose(),header = TRUE)

data <- na.omit(data)


在原始数据中不同基因属于不同列,为了方便操作,需要对数据进行转置

X <- data[,2:79]

# 为data设置新列

X$Genotype <- ifelse(X$Genotype == “Control”, 1, 0)

Xt <- t(X)


使用filterByExpr函数进行低方差滤波,去掉表达量小于1的基因

keep <- filterByExpr(Xt,group = Xt[78,], min.count=1)

X_filtered <- Xt[keep, ]


查看滤波前后基因数

cat(“Number of genes before filtering:”, nrow(Xt), “n”)

cat(“Number of genes after filtering:”, nrow(X_filtered), “n”)



最后


用低方差滤波,瞬间就把维度从78降到了17!是不是很神奇呢?快来和小师妹一起试试吧!


更多实用方便的小工具在云生信平台等着你哦~

http://www.biocloudservice.com/home.html