簡單粗暴!低方差濾波VS高相關(guān)濾波,哪個更簡單?一招讓你的數(shù)據(jù)變得輕松無比?。ㄉ希?/h1>
現(xiàn)代高通量技術(shù)(如基因芯片和RNA測序)可以同時檢測數(shù)萬個基因或特征,數(shù)據(jù)維度往往非常高,而且存在大量的冗余信息和噪聲。這使得對數(shù)據(jù)進(jìn)行可視化、建模和解釋變得非常困難。因此在生物信息數(shù)據(jù)分析中,降維問題一直是重中之重。以往小云也發(fā)布過許多嚴(yán)謹(jǐn)?shù)晕?fù)雜降維方法,今天小云要帶來的是理論和操作都十分直接簡單的低方差濾波以及高相關(guān)濾波(高相關(guān)濾波在下一節(jié)哦~大家敬請期待~)

低方差濾波是一種簡單而有效的降維方法,通常用于去除表達(dá)變化較小的基因或特征,從而減少數(shù)據(jù)中的噪聲和冗余信息。它的基本思想是,如果一個基因在樣本中的表達(dá)變化較小,那么它對區(qū)分不同樣本的貢獻(xiàn)也較小,可以被過濾掉。
?
低方差濾波可以用于基因表達(dá)數(shù)據(jù)的預(yù)處理,以去除表達(dá)變化較小的基因或特征,從而減少數(shù)據(jù)中的噪聲和冗余信息,提高后續(xù)的數(shù)據(jù)分析效果。例如,在差異表達(dá)分析中,可以先使用低方差濾波去除表達(dá)量較低或變化較小的基因,然后再進(jìn)行差異分析,從而獲得更可靠的分析結(jié)果。低方差濾波的效果受到閾值的選擇和數(shù)據(jù)的分布特點(diǎn)的影響。一般來說,閾值越小,保留的基因數(shù)量越多,但同時也會保留更多的噪聲和冗余信息。因此,在選擇閾值時,需要根據(jù)具體的數(shù)據(jù)分布特點(diǎn)和分析目的進(jìn)行綜合考慮,選擇適當(dāng)?shù)拈撝?,以保留足夠的信息,同時去除大部分噪聲和冗余信息。
?
低方差濾波的實(shí)現(xiàn)過程通常包括以下幾個步驟:
1.?計算每個基因在不同樣本中的表達(dá)量,并計算其方差。
2.?對所有基因按照方差從小到大進(jìn)行排序。
3.?根據(jù)預(yù)設(shè)的閾值,選擇方差大于閾值的基因,將其保留下來用于后續(xù)的數(shù)據(jù)分析。
4.?將保留下來的基因構(gòu)成一個新的基因集合,用于后續(xù)的降維分析或建模。
?
需要注意的是,低方差濾波并不是一種萬能的降維方法,它只適用于那些表達(dá)變化較小的基因或特征,而對于表達(dá)變化較大的基因或特征,可能會產(chǎn)生較大的誤差或信息損失。因此,在使用低方差濾波進(jìn)行降維時,需要根據(jù)具體的數(shù)據(jù)特點(diǎn)和分析目的,選取適當(dāng)?shù)姆讲铋撝?,并進(jìn)行必要的數(shù)據(jù)預(yù)處理和驗(yàn)證。
?
filterByExpr函數(shù)是edgeR軟件包中的一個函數(shù),用于根據(jù)表達(dá)量進(jìn)行低方差濾波,篩選出表達(dá)量較高的基因。它接受一個基因表達(dá)矩陣X,以及一個樣本分組向量group和一個最小表達(dá)計數(shù)min.count。

在filterByExpr函數(shù)中,首先計算每個基因的樣本均值和方差,并根據(jù)方差值進(jìn)行排序。然后,根據(jù)每個基因的最小表達(dá)計數(shù)和樣本均值和方差之間的關(guān)系,確定保留哪些基因。具體來說,如果一個基因在所有樣本中的表達(dá)量都小于最小表達(dá)計數(shù),則該基因被過濾掉;否則,如果一個基因在至少一個組中的表達(dá)量大于等于最小表達(dá)計數(shù),并且該基因的方差大于等于其均值的平方,那么該基因被保留。
?
filterByExpr函數(shù)返回一個邏輯向量,指示哪些基因應(yīng)該保留。在使用filterByExpr函數(shù)篩選出表達(dá)量較高的基因之后,可以使用這個邏輯向量來選擇原始基因表達(dá)矩陣X中相應(yīng)的行,從而得到一個濾波后的基因表達(dá)矩陣。
?
今天小果以蛋白質(zhì)表達(dá)數(shù)據(jù)為例,帶大家一起試試吧~
?
首先導(dǎo)入數(shù)據(jù),刪除缺失值
library(limma)
library(edgeR)
?
data=read.csv(file.choose(),header = TRUE)
data <- na.omit(data)
?
在原始數(shù)據(jù)中不同基因?qū)儆诓煌?,為了方便操作,需要對?shù)據(jù)進(jìn)行轉(zhuǎn)置
X <- data[,2:79]
# 為data設(shè)置新列
X$Genotype <- ifelse(X$Genotype == "Control", 1, 0)
Xt <- t(X)
?
使用filterByExpr函數(shù)進(jìn)行低方差濾波,去掉表達(dá)量小于1的基因
keep <- filterByExpr(Xt,group = Xt[78,], min.count=1)
X_filtered <- Xt[keep, ]
?
查看濾波前后基因數(shù)
cat("Number of genes before filtering:", nrow(Xt), "\n")
cat("Number of genes after filtering:", nrow(X_filtered), "\n")

用低方差濾波,瞬間就把維度從78降到了17!是不是很神奇呢?快來和小云一起試試吧!

