2017-06-29 234 views
1

我正在嘗試data.frame邏輯迴歸(11359行,137列)。 data.frame包含Y(一個因變量)和預測變量(136個獨立變量)。所有變量都是二進制的。無法在R中執行邏輯迴歸

我創建基於 「my_data」 data.frame公式是f = as.formula(paste('y ~', paste(colnames(my_data)[c(3:52, 54:133, 138:143)], collapse = '+')))。 我申請GLM,logistf和pmlr如下

  • glm(f, family = binomial(link = "logit"), data = my_data)
  • logistf(f, my_data)
  • pmlr(f, data = my_data, method = "likelihood", joint = TRUE)

GLM功能估計一些參數,但給人一種Warning message: glm.fit: fitted probabilities numerically 0 or 1 occurred。我發現這個消息是由於分離問題而產生的,所以我嘗試了logistf和pmlr函數。

隨着logistf,我並沒有獲得50小時後的結果沒有錯誤,所以我決定終止TE過程。 (CPU使用率23-27%,前10個小時使用RAM約1100MB,然後2-3mb)。

對於pmlr,我得到這個Error: cannot allocate vector of size 28.9 Gb

我試圖基於10出的137變量logistf和pmlr檢查,如果問題是預測數,我得到了相同的。 Logistf正在「永遠」工作,並且pmlr給出了不同大小的向量的相同類型的錯誤(如果我正確記得大約45 Gb,則比以前大!)。

我應該更新我的筆記本電腦的內存來執行此計算,找到一些其他功能(如果有對罰邏輯迴歸其它包),或者它是一個不同類型的問題例如很多變數?

視窗10的X64,處理器:i3-2.4GHz,拉姆:8.00Gb,R版本:64 3.4.0,Rstudio:1.0.143。

+0

還有就是在R A載體,它是2^31的最大尺寸的限制 - 1.也許你的數據超過此限制。無論您的機器是什麼,這個大小都是R中矢量的極限。如果您的問題與此相關聯,唯一的方法是使用其他算法來解決問題,包括分解數據並容許模型的準確性。 –

+0

嘗試用'speedglm':https://cran.r-project.org/web/packages/speedglm/speedglm.pdf –

+0

你打算如何處理所有的預測因素:作爲一個alt可能通過套索迴歸並看看預測指標會出現什麼變化?見'glmnet' – user20650

回答

1

https://cran.r-project.org/web/packages/biglm/biglm.pdfhttps://www.rdocumentation.org/packages/biglm/versions/0.9-1/topics/biglm

biglm創建使用而僅爲P^2存儲器對於p變量的線性模型對象。它可以使用更新更新更多的數據。這允許數據集上的線性迴歸大於內存。

bigglm 創建使用僅 P 1 2存儲器對於p變量廣義線性模型對象。

bigglm 用法

bigglm(formula, data, family=gaussian(),...) 
## S3 method for class 
' 
data.frame 
' 
bigglm(formula, data,...,chunksize=5000) 
## S3 method for class 
' 
function 
' 
bigglm(formula, data, family=gaussian(), 
weights=NULL, sandwich=FALSE, maxit=8, tolerance=1e-7, 
start=NULL,quiet=FALSE,...) 
## S3 method for class 
' 
RODBC 
' 
bigglm(formula, data, family=gaussian(), 
tablename, ..., chunksize=5000) 
## S4 method for signature 
' 
ANY,DBIConnection 
' 
bigglm(formula, data, family=gaussian(), 
tablename, ..., chunksize=5000