如何基于分位数截止来过滤矩阵中的基因?

时间:2017-07-13 07:46:53

标签: r subset bioinformatics bioconductor quantile

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

                  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个基因作为rownames,100个样本作为列。我需要选择前20%高度可变的基因进行聚类。但我不确定我给的是对还是不对。

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

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

你认为我给出的命令对于获得前20%高变异基因是正确的吗?有谁能告诉我这种方法如何以统计方式运作?

1 个答案:

答案 0 :(得分:3)

我自己没有使用过这个软件包,但是你正在使用的函数的帮助文件做了如下注释:

  

分割数据集时,IQR是一种合理的方差过滤器选择   分为两个大致相等且相对同质的表型组。如果   您的数据集的重要组小于整体的25%   样本量,或者如果您对不寻常的个人级别感兴趣   模式,那么IQR可能不够敏感,无法满足您的需求。在这样的   在这种情况下,您应该考虑使用不太健壮和更敏感的   方差度量(最简单的是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), ]