我的数据显示观察次数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
)是否有任何其他函数可以做我想要的?
答案 0 :(得分:3)
BIC是从glmnet返回的序列中选择惩罚参数的一种很好的方法,交叉验证速度更快,并且至少在我尝试过的设置中效果很好。
predict(model,x)
来获得拟合)model$df
为您提供自由度。