2017-06-29 218 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