从glmnet中选择模型后,逐步算法选择BIC模型

时间:2015-10-23 20:04:03

标签: r glmnet

我的数据显示观察次数n小于变量次数p。答案变量是二进制的。例如:

n <- 10
p <- 100
x <- matrix(rnorm(n*p), ncol = p)
y <- rbinom(n, size = 1, prob = 0.5)

我想为这些数据拟合逻辑模型。所以

model <- glmnet(x, y, family = "binomial", intercept = FALSE)

该函数为不同的$ \ lambda $值返回100个模型(LASSO回归中的惩罚参数)。我想选择最大的模型,它也有n - 1个参数或更少(因此少于观察次数)。我们假设所选模型适用于lambda_opt

model_one <- glmnet(x, y, family = "binomial", intercept = FALSE, lambda = lambda_opt)

现在我想做第二步 - 使用step函数到我的模型中选择子模型,它将是BIC中最好的子模型 - 贝叶斯信息准则。遗憾的是,step函数不适用于glmnet类的对象。

step(model_one, direction = "backward", k = log(n))

我该如何执行此类程序?这个特定的类(glmnet)是否有任何其他函数可以做我想要的?

1 个答案:

答案 0 :(得分:3)

BIC是从glmnet返回的序列中选择惩罚参数的一种很好的方法,交叉验证速度更快,并且至少在我尝试过的设置中效果很好。

  • 计算序列中惩罚参数的每个值的残差平方和(使用predict(model,x)来获得拟合)
  • model$df为您提供自由度。
  • 将这些组合起来获得BIC并选择对应于降低BIC的lambda值。