如何根据分位数截止值过滤矩阵中的基因?

How to filter genes in matrix based on quantile cutoff?

这是一个包含一些示例数据的矩阵:

                  S1        S2       S3
ARHGEF10L       11.1818   11.0186  11.243
HIF3A            5.2482   5.3847   4.0013
RNF17            4.1956      0        0
RNF10            11.504   11.669.  12.0791
RNF11            9.5995   11.398    9.8248
RNF13            9.6257  10.8249    10.5608
GTF2IP1         11.8053  11.5487    12.1228
REM1             5.6835   3.5408    3.5582
MTVR2               0     1.4714      0
RTN4RL2          8.7486   7.9144    7.9795
C16orf13        11.8009   9.7438    8.9612
C16orf11            0        0         0
FGFR1OP2          7.679   8.7514    8.2857
TSKS             2.3036    2.8491   0.4699

我有一个矩阵 "h",其中 10,000 个基因作为行名,100 个样本作为列。我需要 select 前 20% 的高度可变基因进行聚类。但是我不确定我给的是对还是错。

因此,对于此过滤,我使用了 genefilter R package

varFilter(h, var.func=IQR, var.cutoff=0.8, filterByQuantile=TRUE)

你认为我给出的命令是否正确获取前20%的高变异基因?谁能告诉我这个方法在统计上是如何工作的?

我自己没有用过这个包,但是你使用的函数的帮助文件有如下说明:

IQR is a reasonable variance-filter choice when the dataset is split into two roughly equal and relatively homogeneous phenotype groups. If your dataset has important groups smaller than 25% of the overall sample size, or if you are interested in unusual individual-level patterns, then IQR may not be sensitive enough for your needs. In such cases, you should consider using less robust and more sensitive measures of variance (the simplest of which would be sd).

由于您的数据有很多小组,因此遵循此建议将您的 var.func 更改为 var.func = sd 可能是明智的。

sd计算standard deviation,应该很容易理解。

但是,此函数需要其数据以 expressionSet 对象的形式。您收到的错误消息 (Error in (function (classes, fdef, mtable) : unable to find an inherited method for function 'exprs' for signature '"matrix"') 暗示您没有它,而只是一个普通矩阵。

我不知道如何创建 expressionSet,但我认为这样做太复杂了。所以我建议使用您在评论中发布的代码:

vars <- apply(h, 1, sd)
h[vars > quantile(vars, 0.8), ]