2013-08-20 30 views
0

我有個問題。我在其他地方尋找答案,但無法解決我的問題。有人可以幫我嗎?我有一個包含三個變量的大約100萬條記錄的數據集:N(數字),X(因子),E(數字)。變量X有大約100個級別。當我試圖運行相同的代碼,但用另一個協變量Y(只有4個級別)替換X時,它的工作原理很好。也許它與變量X本身有關係?例如,某些X的級別只有真正的低頻率出現,而Y不是這種情況。那麼這是一個問題(因爲bigglm將數據分成塊,而不是每個塊都可能擁有X的所有級別)?bigglm - 跑出迭代並未能收斂

我的機器只有2 GB RAM。其中一個目標是在R中使用軟件包,以便在大型數據集上再現代碼時仍能正常工作。

如果你需要更多的細節,請問我,我會提供他們。

STR(數據)給出以下:

'data.frame' : 967821 obs. of 13 variables: 
$ E   : num 0.6694 0.418 0.0546 0.1612 0.071 ... 
$ Y   : Factor w/ 4 levels "1","2","3","4": 1 1 3 2 1 1 1 1 1 4 ... 
$ ??   : Factor w/ 2 levels "??",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ ??   : Factor w/ 38 levels "??","??",..: 37 29 11 21 24 23 16 36 19 36 ... 
$ ??   : num 77 43 66 72 96 43 45 78 53 65 ... 
$ ??   : num 7.29 12.42 21.88 5.78 2.62 ... 
$ ??   : Factor w/ 1150 levels "1000","1020",..: 494 1003 456 183 163 1055 881 128 1019 1041 ... 
$ ??   : num 52.5 78 37.7 41.1 64.3 ... 
$ ??   : Factor w/ 31 levels "1","2","3","4",..: 22 11 3 3 11 2 11 11 3 2 ... 
$ ??   : num 34.2 48.9 12.2 19.8 44.3 ... 
$ N   : int 0 0 0 0 0 0 0 0 0 0 ... 
$ ??   : Factor w/ 2 levels "1","2": 1 1 1 2 1 2 2 1 1 1 ... 
$ X   : Factor w/ 89 levels "18","19","20",..: 36 61 21 24 47 36 48 67 17 18 ... 

我的代碼如下:

library(ffbase) 
library(biglm) 
data = as.ffdf(data) 
regglm2=bigglm.ffdf(N~X+offset(log(E)),data=data, family=poisson(), maxit=100, chunksize=10000) 

該錯誤是:

警告消息: 在bigglm.function(公式=公式,數據= datafun,...): 跑出迭代並沒有收斂

+0

事情你可以問自己。 X中有多少個因子水平,並且是否存在一些與其他因素有關的因素會導致收斂問題? – jwijffels

+0

向我們展示'str(data)' –

+0

我更新了我的帖子。我還指出了可能導致問題的一些事情。然而我不知道bigglm究竟做了什麼,所以它可能根本就沒有任何關係...... – Roger

回答

1

兩個問題,其中任何一個可以根據機器的資源被認爲是一個答案:

1)你是否增加了控制列表中的迭代次數? maxit可以控制並且默認爲一個小數字。嘗試增加到25

2)您確定您需要bigglm?你是否試過只用glm?這不是一個非常大的對象。如果你在一臺4GB的機器上,那麼一定要在你的啓動配置中使用最少的程序和Windoze的東西(無論調用顯示器下邊緣的那些小程序是什麼),並且不要在其他程序中運行R.

+0

感謝您的回答。不幸的是,兩項建議都沒有奏效我會馬上在原文中添加一些附加信息。當我嘗試1時,我仍然有相同的錯誤消息,但只有40分鐘後。關於問題2,我有一個2GB的機器,並收到錯誤消息「無法分配大小的矢量...」。在此之上,我的研究目標之一是使用軟件包,以便代碼可以在更大的數據集上重現。 – Roger

+0

嘗試對內存問題使用較小的塊大小,對於其他問題,嘗試使用比100更多的迭代。 – marbel