2014-02-12 34 views
2

我試圖對包含4000000行以上的CSV數據集中的兩個因子變量執行固定效果迴歸。這些變量可以分別假設大約140000和50000個不同的整數值。在大型數據集上計算多個固定效果

我最初嘗試使用biglm和ff軟件包對R進行迴歸,如下所示,它在具有8 Gb內存的Linux機器上執行:然而,這似乎需要太多的內存,因爲R抱怨必須在我的機器上分配一個大於最大值的向量。

library(biglm) 
library(ff) 
d <- read.csv.ffdf(file='data.csv', header=TRUE) 
model = y~factor(a)+factor(b)-1 
out <- biglm(model, data=d) 

一些研究網上透露,自因素由FF加載到內存中,後者將不會顯著提高內存的使用情況,如果許多因子值都存在。

有沒有人知道一些其他的方式來執行我所描述的量級數據集的上述迴歸,而不必求助於具有更多內存的機器?

+0

我會嘗試從R中刪除所有其他數據集/對象(也關閉所有其他項目),如果有的話。你可以通過使用rm()和之後的gc()來將清除數據釋放回內存。 – user1738753

+0

我確實確認上述腳本是在R會話中運行的唯一代碼。在任何情況下,我發現在具有更多(32 Gb)內存的計算機上運行腳本可防止最初的內存投訴,但很快導致機器開始使用交換內存並減速。 – lebedov

+1

您目前使用biglm。我想你想用高斯鏈接來使用bigglm。您應該使用ffbase包中的bigglm.ffdf。 require(ffbase)和方法(bigglm)讓你在那裏。你也不需要指定因子(a),a已經是一個因子。 – jwijffels

回答

1

如果您將貶低變量(按類別),您可以獲得固定效果的相同數學含義。所以,不是每個假人找到一個常數,而是貶低它。並且貶低將會非常快,因爲它將被矢量化。

編輯1: 參見Green 2012 p.400-401的數學證明。

+0

對不起 - 什麼是證明的完整參考? 我原來的帖子中可能沒有足夠清晰,但我的目標是確定固定效果的值。儘管我遵循這種貶低數據w.r.t.每個固定效果將允許執行等效迴歸,如何使用它來自己獲得實際的固定效果? (更多參考文獻歡迎。) – lebedov

+0

@lebedov對不起,我錯過了這個通知。我不明白你對FE有興趣。我認爲這只是一個性能問題。 – Elad663

2

你應該嘗試的包LFE,它被設計出於這樣的目的:

library(lfe) 
... 
out <- felm(y ~ 0|a+b, data=d) 
fe <- getfe(out) 

方法的證明可以在這裏找到:http://www.sciencedirect.com/science/article/pii/S0167947313001266

這裏有一個關於它的R-期刊文章:http://journal.r-project.org/archive/2013-2/gaure.pdf

+0

我試過了,但數據集仍然太大,無法在我的系統上處理。 – lebedov

+0

好吧,那不是問題的因素中的層次數,而是您對數據集的處理。它包含400萬行,每個行都有兩個因素。因素使用4字節整型存儲,所以每行8個字節,這僅僅是32MB。 lfe將創建兩個副本(一個用於模型矩陣(如果因素是唯一的協變量,則爲空),另一個用於結果,您將保持在100MB以下,遠低於8GB。 –

相關問題