1

我正在尝试对 data.frame(11359 行,137 列)进行逻辑回归。data.frame 包含 Y(一个因变量)和预测变量(136 个自变量)。所有变量都是二进制的。

我基于“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小时后我没有得到任何结果,没有错误,所以我决定终止这个过程。(cpu 使用率 23-27%,ram 使用率在前 10 小时内约为 1100mb,然后是 2-3mb)。

对于 pmlr,我得到了这个Error: cannot allocate vector of size 28.9 Gb

我根据 137 个变量中的 10 个尝试了 logistf 和 pmlr 来检查问题是否是预测变量的数量,我得到了相同的结果。Logistf 一直在工作,并且 pmlr 给出了相同类型的错误,但向量的大小不同(比以前大!!!!,如果我没记错的话,大约 45 Gb)。

我是否应该更新笔记本电脑的 RAM 以执行此计算,找到一些其他功能(如果有其他用于惩罚逻辑回归的软件包)或者它是一种不同类型的问题,例如很多变量?

Windows 10 x64,处理器:i3-2.4GHz,内存:8.00Gb,R 版本:x64 3.4.0,Rstudio:1.0.143。

4

1 回答 1

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 个变量使用 p^2 内存。

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
于 2017-06-29T09:36:49.953 回答