【问题标题】:correlation matrix using large data sets in R when ff matrix memory allocation is not enough当 ff 矩阵内存分配不够时,R 中使用大型数据集的相关矩阵
【发布时间】:2014-07-27 07:16:28
【问题描述】:

我有一个简单的分析要做。我只需要计算列(或行,如果转置)的相关性。够简单吗?我无法获得整周的结果,我已经浏览了这里的大部分解决方案。

我的笔记本电脑有 4GB 内存。我确实可以访问具有 32 个节点的服务器。我的数据无法在此处加载,因为它很大(411k 列和 100 行)。如果您需要任何其他信息或部分数据,我可以尝试将其放在这里,但无需真正查看数据即可轻松解释问题。我只需要得到一个大小为 411k X 411k 的相关矩阵,这意味着我需要计算数据行之间的相关性。

我尝试编写的概念:(所有这些都以某种方式给我带来了内存问题或永远运行)

  1. 最简单的方法,一行反对所有,使用 append.T 写出结果。 (永远运行)
  2. biCorPar.r by bobthecat (https://gist.github.com/bobthecat/5024079),将数据分成块并使用 ff 矩阵。 (无法在我的服务器中使用 ff() 分配内存来分配 corMAT 矩阵)
  3. 将数据拆分为集合(每 10000 个连续行将是一个集合)并将每个集合与另一个集合进行关联(与 bigcorPar 的逻辑相同),但我无法找到一种方法将它们全部存储在一起最终生成最终的 411kX411k 矩阵。
  4. 我现在正在尝试这个,bigcorPar.r 在 10000 行上针对 411k(因此 10000 被分成块)并将结果保存在单独的 csv 文件中。
  5. 我还尝试在我的服务器的一个节点上运行每 1000 vs 411k,今天是我的第三天,我仍然在第 71 行。

我不是 R 专业人士,所以我只能尝试这么多。要么我的代码永远运行,要么我没有足够的内存来存储结果。有没有更有效的方法来解决这个问题?

感谢您的所有 cmets 和帮助。

【问题讨论】:

  • 一个大小为 411000 x 411000 的相关矩阵。即 1.68921e+11 个元素。 ff 向量中的最大元素数为 2147483647。您的对象将是该最大值的 +/- 50 倍。你应该重新考虑你想用这个相关矩阵做什么。

标签: r memory-management ff


【解决方案1】:

我自己在基因研究的背景下熟悉这个问题。

如果您只对显着相关性感兴趣,您可能会发现我的包 MatrixEQTL 很有用(可在 CRAN 上获得,更多信息在这里:http://www.bios.unc.edu/research/genomic_software/Matrix_eQTL/)。

如果您想保留所有相关性,我想首先警告您,以二进制格式(与文本相比更经济)需要 411,000 x 411,000 x 8 字节 = 1.3 TB。如果这是您想要的,并且您对所需的存储没问题,我可以提供用于此类计算和存储的代码。

【讨论】:

  • 我确实有一个有 32 个节点的服务器,我可以用它来运行我的相关性分析。我想我可以节省 1.3TB 的空间。但是经过多次尝试,我还没有找到解决方案。我将研究 Matrix_eQTL,如果它对我的情况有帮助,我会告诉你。非常感谢您让我知道您的包裹。
  • Matrix eQTL 仅在您想记录有关少数重要关联的信息时才有用。对于所有相关性,我谈论的是不同的代码。
  • 是的,我没看错。我现在正在寻找具有相关性和相应 p 值的最重要的那些,因为我为获得完整的 martix 所做的许多尝试都失败了。
  • 如果我无法仅使用重要的得出结论,并且如果必须获得完整的矩阵以在全球范围内理解图片,我会要求您提供其他代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
相关资源
最近更新 更多