请参见下面的编辑 我想使用R过滤矩阵(基因表达数据),并保留只有高方差值的行(基因/探针)。例如,我想只保留在底部和顶部百分位数(例如低于20%和高于80%)具有值的行。我希望将我的研究限制在仅具有高方差的基因上,以进行下游分析。在R中是否有常用的基因过滤方法?
我的矩阵有18个样品(列)和47000个探针(行),其值已进行log2转换和归一化处理。我知道quantile()
函数可以确定每个样本列中的20%和80%截止值。我无法找出如何在整个矩阵中找到这些值,然后对原始矩阵进行子集操作以删除所有“不变”的行。
以下是示例矩阵,平均值为5.97,因此最后三行应被删除,因为它们包含介于20%和80%截止值之间的值:
> m
sample1 sample2 sample3 sample4 sample5 sample6
ILMN_1762337 7.86 5.05 4.89 5.74 6.78 6.41
ILMN_2055271 5.72 4.29 4.64 5.00 6.30 8.02
ILMN_1736007 3.82 6.48 6.06 7.13 8.20 4.06
ILMN_2383229 6.34 4.34 6.12 6.83 4.82 5.57
ILMN_1806310 6.15 6.37 5.54 5.22 4.59 6.28
ILMN_1653355 7.01 4.73 6.62 6.27 4.77 6.12
ILMN_1705025 6.09 6.68 6.80 6.85 8.35 4.15
ILMN_1814316 5.77 5.17 5.94 6.51 7.12 7.20
ILMN_1814317 5.97 5.97 5.97 5.97 5.97 5.97
ILMN_1814318 5.97 5.97 5.97 5.97 5.97 5.97
ILMN_1814319 5.97 5.97 5.97 5.97 5.97 5.97
我希望能得到任何建议,或者你认为我应该了解的函数。谢谢!
编辑
抱歉,我的问题可能不太清楚。(1) 我想知道整个矩阵的20%和80%截止值(而不仅仅是每个样本的)。 (2) 然后,如果任何一行包含上限或下限百分位数中的值,R将保留这些行。 如果一行包含接近平均值的值(对所有样本而言),那么这些行将被舍弃。
class(m)
。 - Simon O'Hanlonm.var <- varFilter(m, var.func=IQR, var.cutoff=0.6, filterByQuantile=TRUE)
,并使用nrow(m)
和row(m.var)
来比较过滤后剩余探针的数量。 - Todd