【问题标题】:How to filter genes in matrix based on quantile cutoff?如何根据分位数截止过滤矩阵中的基因?
【发布时间】:2017-12-17 20:57:26
【问题描述】:

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

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

所以,对于这个过滤,我使用了genefilter R package

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

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

【问题讨论】:

  • 我会通过将您的 matrix 转换为 data.frame 来做到这一点。这对您来说是一个选择,还是您想留在bioconductor 包框架内?至于基础统计数据,我认为这是交叉验证 (stats.stackexchange.com)
  • 好的。我应该在此处删除此问题并在交叉验证中发布,还是仅在交叉验证中发布此链接就可以了?
  • 我认为这个问题在这里很好,但如果你想在最后一部分得到详细的答案(“谁能告诉我这个方法是如何以统计方式工作的?”)为此,我会在 Cross Validated 上单独发布一个。
  • 好的。你认为这是对的吗?选出前 20% 的基因? vars quantile(vars, 0.8), ]
  • 是的,我认为@Jarko Dubbeldam 的回答看起来很棒,一针见血

标签: r subset bioinformatics bioconductor quantile


【解决方案1】:

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

当数据集被拆分时,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,但我认为这样做无论如何都过于复杂。因此,我建议您使用您在 cmets 中发布的代码:

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

【讨论】:

  • 你能告诉我如何应用它来获得前 20% 的基因吗?
  • varFilter(h, var.func=sd, var.cutoff=0.8, filterByQuantile=TRUE) 应该可以工作。
  • 好的。但是你认为截止 0.8 时选择的基因是前 20% 吗?我知道它从所有可用基因中提供了 20% 的基因,但不确定它们是否是前 20%
  • 你认为这给了前 20% 吗?我想这次我是对的。 vars quantile(vars, 0.8), ]
  • 不,你给的那个不起作用并给出错误
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多