【问题标题】:R Remove intercepts in logistic regressionR删除逻辑回归中的截距
【发布时间】:2015-04-23 19:13:01
【问题描述】:

我正在使用 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。

【问题讨论】:

  • 你必须使用rms库吗?
  • 不。我知道三个可能的库,glmnetLiblinearCrms;如果您知道其他任何人,我不介意向他们学习。我发现LiblinearC 运行时间更长,结果比rms 更奇怪;我正在测试glmnet
  • 我认为 glmnet 现在是最先进的。
  • 好的,谢谢。你知道是否有人实现了 IRLS-LARS 算法?
  • glmnet 使用迭代坐标,速度也很快。

标签: r logistic-regression regularized


【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-04-12
    • 2020-01-05
    • 2018-01-26
    • 2019-02-12
    • 1970-01-01
    • 2018-02-12
    • 2014-06-20
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多