4

R 版本 2.15.0 (2012-03-30) RStudio 0.96.316 Win XP,最后更新

我确实有一个包含 40 个变量和 15.000 个观察值的数据集。我想使用 bestglm 搜索可能的好模型(逻辑回归)。我试过 bestglm,但它不适用于这种中等大小的数据集。经过几次试验,我认为当有超过 30 个变量时 bestglm 会失败,至少在我的计算机上(4G ram,双核)。

您可以自己尝试 bestglm 限制:

library(bestglm)

bestBIC_test <- function(number_of_vars) {

# Simulate data frame for logistic regression
glm_sample <- as.data.frame(matrix(rnorm(100*number_of_vars), 100))

# Get some 1/0 variable
glm_sample[,number_of_vars][glm_sample[,number_of_vars] > mean(glm_sample[,number_of_vars]) ] <- 1
glm_sample[,number_of_vars][glm_sample[,number_of_vars] != 1 ] <- 0

# Try to calculate best model
bestBIC  <- bestglm(glm_sample, IC="BIC", family=binomial)

}

# Test bestglm with increasing number of variables
bestBIC_test(10) # OK, running
bestBIC_test(20) # OK, running
bestBIC_test(25) # OK, running
bestBIC_test(28) # Error: cannot allocate vector of size 1024.0 Mb
bestBIC_test(30) # Error: cannot allocate vector of size 2.0 Gb
bestBIC_test(40) # Error in rep(-Inf, 2^p) : invalid 'times' argument

我可以在 R 中使用任何替代方法来搜索可能的好模型吗?

4

2 回答 2

7

好吧,对于初学者来说,详尽搜索 40 个变量的最佳子集需要创建超过一万亿个的 2^40 个模型。那很可能是你的问题。

对于超过 20 个左右的变量,详尽的最佳子集搜索通常不被认为是最佳的。

更好的选择是向前逐步选择,大约是 (40^2+40)/2 个模型,所以大约是 800。

甚至更好(我认为最好的)通过glmnet包使用套索进行正则化逻辑回归。

这里有很好的概述。

于 2014-03-25T18:20:26.677 回答
5

您可以尝试探索包caret,它也有用于模型选择的工具。我能够毫无问题地拟合具有 15000 个观察值的模型:

number_of_vars <- 40

dat <- as.data.frame(matrix(rnorm(15000*number_of_vars), 15000))
dat[,number_of_vars][dat[,number_of_vars] > mean(dat[,number_of_vars]) ] <- 1
dat[,number_of_vars][dat[,number_of_vars] != 1 ] <- 0

library(caret)
result <- train(dat[,1:39], dat[,40], family = "binomial", method = "glm")
result$finalModel

我会查阅大量文档以更好地控制模型拟合。

于 2012-08-17T23:07:49.737 回答