我试着用Benjamini &Hochberg的方法计算一组FDR校正的p值。但是,我试图运行的向量包含超过100亿个值。
考虑到数据量,普通的状态模型的方法多功能模块很快就会耗尽内存。从该函数的源代码来看,它似乎创建了多个内存长度为100亿的向量,这显然是行不通的,即使在一台内存为100 to的机器上也是如此。
是否有办法做到这一点,理想情况下,不必将整个向量保存在内存中?特别是,我想知道是否有可能以允许它使用h5py数据结构在磁盘上运行的方式重新实现BH。
或者其他建议?
发布于 2015-06-12 20:13:03
以防其他人无意中发现这一点:
我解决这个问题的方法是首先提取所有有机会超过FDR校正阈值的p值(我使用了1e-5)。内存消耗不是这个问题,因为我可以迭代磁盘上的p值列表。
这给了我一套400 K的最低p值。然后,我手动将BH过程应用于这些p-值,但在公式中插入了原始测试数。由于BH是一个逐步提升的过程,因此(据我所知)这相当于将BH应用于整个向量,而不需要对100亿个值排序。
https://stackoverflow.com/questions/30764325
复制相似问题