数据
为简单起见,我提出以下方案:
- 我有两个DataFrame,一个带基因,另一个带miRNA(这是一个简单的例子,DF不是这样的),数据是连续的:
Gene_1 Gene_2 Gene_3
Patient_1 220.43 12,959 12,311
Patient_2 270.27 12,870 13,234
miRNA_1 miRNA_2 miRNA_3
Patient_1 220.43 12,959 12,311
Patient_2 270.27 12,870 13,234
- 我必须绘制所有基因与所有 miRNA 的相关性(使用 Pearson、Kendall 或 Spearman 相关性,没关系),建立以下结构作为最终结果:
Gene miRNA Correlation P-value Adjusted P-value
Gen_1 miRNA_1 0,959 0.00311 0.00014
Gen_1 miRNA_2 -0,039 0.00311 0.00014
Gen_1 miRNA_3 -0,344 0.00311 0.00014
Gen_2 miRNA_1 0,1333 0.00311 0.00014
Gen_2 miRNA_2 0,877 0.00311 0.00014
...
问题
Cross Join 的结果(all against all)可能会产生一个包含数十亿行的 DataFrame。为了给出所需空间的维度,撇开基因和 miRNA 的列并考虑 3 亿行的小结果将需要 300000000 *(浮动 pt 中的 16 位相关性 + 64 位 p 值 + 64调整后的 p 值位)= 5 GB 约。
为了优化内存使用,我分批进行计算,问题在于调整后的 p 值,因为我使用Benjamini & Hochberg (1995)的方法和 R的函数p.adjust(使用 Python 包装器)这需要完整的 p 值数组,这使我内存不足。
有没有办法从另一个库或另一个类似的统计方法计算批量调整的 p 值?
我已经尝试过FastLSU技术来过滤掉一些不重要的 p 值,但据我所知,当我为每一行获得调整后的 p 值时,我需要知道所有的总 p 值。如果我可以为每一行获得调整后的 p 值,我的问题将得到解决,因为我可以将批次的结果下载到磁盘并告别并发症。
如果有人能对这个主题有所了解,我将不胜感激