2015-04-23 3 views
0

Я использую rms-библиотеку для выполнения регуляризованной логистической регрессии и хочу, чтобы перехват был равен нулю. Я использую следующие для моделирования и регресс:R Удалить перехваты в логистической регрессии

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.

+0

Вам нужно использовать библиотеку 'rms'? –

+0

Нет. Я знаю три возможные библиотеки: 'glmnet',' LiblinearC' и 'rms'; если вы знаете что-нибудь другое, я бы не прочь узнать о них. Я обнаружил, что 'LiblinearC' работает дольше и дает более чужие результаты, чем' rms'; Я тестирую 'glmnet' прямо сейчас. – TreeStump

+0

Я думаю, что glmnet - это современное состояние. –

ответ

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) 
Смежные вопросы