1

我有观察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$ 值(LASSO回归中的惩罚参数)返回 100 个模型。我想选择最大的模型,它也有n - 1参数或更少(所以少于观察次数)。假设选择的模型是 for 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可以做我想做的吗?

4

1 回答 1

3

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

  • 计算序列中每个惩罚参数值的残差平方和(用于predict(model,x)获得拟合)
  • model$df给你自由度。
  • 将这些组合起来得到一个 BIC 并选择对应于较低 BIC 的 lambda 值。
于 2015-11-25T22:50:04.653 回答