R删除逻辑回归中的截距

时间:2015-04-23 19:13:02

标签: r logistic-regression regularized

我正在使用rms库执行正则逻辑回归,并希望将截距强制为零。我正在使用以下模拟和回归:

library(rms)
N = 100
pred <- vapply(1:12, function(i) rnorm(N, mean = 0, sd =1), numeric(N))
resp <- 20*pred[, 1] - 3*pred[, 7] - 2*pred[, 8] + matrix(rnorm(N, sd = 0.1)) + 20
pr <- 1 / (1 + exp(-resp))
y <- rbinom(N, 1, pr)
lrm(y ~ pred, penalty = 1)

How to remove intercept in R的帖子建议在模型公式中包含'0 +'或' - 1'。但是,这似乎不适用于lrm。

1 个答案:

答案 0 :(得分:1)

您可以使用glmnet。它还包括用于选择车削参数的交叉验证功能。

library(glmnet)
N = 1000
pred <- vapply(1:12, function(i) rnorm(N, mean = 0, sd =1), numeric(N))
resp <- 20*pred[, 1] - 3*pred[, 7] - 2*pred[, 8] + matrix(rnorm(N, sd = 0.1)) + 20
pr <- 1 / (1 + exp(-resp))
y <- rbinom(N, 1, pr)
result <- cv.glmnet(pred, y, family="binomial", intercept=FALSE)
# best lambda based on cv
result$lambda.min
# coefficient
coef(result$glmnet.fit, s=result$lambda.min)