2014-06-06 88 views
0

我有一個簡單的分析需要完成。我只需要計算列(或行,如果轉置)的相關性。夠簡單?我整個星期都無法得到結果,並且我已經瀏覽了大部分解決方案。當ff矩陣內存分配不夠時,在R中使用大數據集的相關矩陣

我的筆記本電腦有4GB RAM。我可以訪問32個節點的服務器。我的數據無法在這裏加載,因爲它很大(411k列和100行)。如果您需要任何其他信息或可能是數據的一部分,我可以嘗試將其放在此處,但是可以輕鬆解釋問題,而不必真正查看數據。我只需要得到大小爲411k×411k的相關矩陣,這意味着我需要計算我的數據行之間的相關性。

概念我試圖代碼:(他們都以某種方式給我記憶問題或永遠運行)

  1. 最簡單的方式,對所有一排,結果寫出來使用append.T 。 (永久運行)
  2. bobthecat的biCorPar.r(https://gist.github.com/bobthecat/5024079),將數據分成塊並使用ff矩陣。 (無法分配內存來分配我的服務器中使用ff()的corMAT矩陣)
  3. 將數據拆分成集(每10000個連續的行將成爲一個集合)並且將每個集合與其他集合(與bigcorPar相同的邏輯)但我無法找到一種方法將它們全部存儲在一起,最終生成最終的411kX411k矩陣。
  4. 我現在正在嘗試這一點,bigcorPar.r 10000行對411K(所以10000被分成塊),並保存在單獨的CSV文件的結果。
  5. 我也試圖在我的服務器上運行,每1000 VS 411k中的一個節點,今天是我的第3天,我仍然排71

我不是的R親,所以我只能嘗試這麼多。要麼我的代碼永遠運行,要麼我沒有足夠的內存來存儲結果。有沒有更有效的方法來解決這個問題?

感謝您的所有意見和幫助。

+0

大小爲411000 x 411000的相關矩陣。即1.68921e + 11個元素。 ff向量中元素的最大數量是2147483647.您的對象將是最大值的+/- 50倍。你應該重新思考你想用這個相關矩陣做什麼。 – jwijffels

回答

1

我在基因研究的背景下自己很熟悉這個問題。

如果您只對重要的相關性感興趣,您可能會發現我的軟件包MatrixEQTL有用(可在CRAN上獲得,更多信息請點擊:http://www.bios.unc.edu/research/genomic_software/Matrix_eQTL/)。

如果你想保持所有的相關性,我想首先警告你,在二進制格式(與文本相比經濟),將需要411,000 x 411,000 x 8字節= 1.3 TB。如果這是你想要的,並且你可以使用所需的存儲空間,那麼我可以提供用於這種計算和存儲的代碼。

+0

我的服務器有32個節點,可以用來運行相關性分析。我想我可以節省1.3TB的空間。但經過多次嘗試,我還沒有找到解決方案。我將查看Matrix_eQTL,如果這對我有幫助,我會告訴你。非常感謝您讓我知道您的包裝。 – user2698508

+0

如果您想記錄關於少數重要關聯的信息,Matrix eQTL只會有幫助。對於所有的相關性,我都在談論一個不同的代碼。 –

+0

是的,我明白了。我正在尋找獲得最重要的關聯和相應的p值,因爲我爲獲得完整的martix所做的很多嘗試失敗了。 – user2698508