我正在尝试使用Benjamini& amp;计算一组FDR校正的p值。 Hochberg的方法。但是,我尝试运行此向量的向量包含超过100亿个值。
鉴于数据量正常method from statsmodel's多组件模块快速耗尽内存。看看该函数的源代码,它似乎创建了多个内存长度为100亿的向量,这显然不会起作用,即使在具有100GB RAM的计算机上也是如此。
有没有办法做到这一点,理想情况下无需将整个矢量保存在内存中?特别是我想知道是否有可能以允许它使用h5py数据结构在磁盘上运行的方式重新实现BH。
或其他任何建议?
答案 0 :(得分:2)
如果有其他人偶然发现:
我解决这个问题的方法是首先提取所有有可能通过FDR校正阈值的p值(我用1e-5)。内存消耗不是问题,因为我可以遍历磁盘上的p值列表。
这给了我一组约400k的最低p值。然后我手动将BH程序应用于这些p值,但是将原始数量的测试插入到公式中。由于BH是一个升级程序,这(据我所知)相当于将BH应用于整个向量,而不需要我对100亿个值进行排序。