Как glmnet() обрабатывает как оштрафованные, так и не оштрафованные ковариаты?

Можно ли построить модель лассо как с оштрафованными, так и без оштрафованных ковариатами? То есть я хочу сделать оценку с Y ~ gamma * X + beta * Z, где X — это n*p оштрафованных признаков, а Z — n*q не оштрафованных ковариат продолжающих или факторных переменных.

Спасибо.


person baidao    schedule 08.12.2015    source источник


Ответы (1)


Это четко указано в виньете в разделе Наказание. Факторы. Чтобы гарантировать, что некоторые переменные не будут оштрафованы, установите Penal.factor равным 0. Вам просто нужно создать вектор длины ncol(X) + ncol(Z), где первые ncol(X) записи равны 1 (или любому положительному ненулевому числу), а остальные ncol(Z) записи равны 0. Например:

set.seed(1234)
n = 100 # number of samples
px = 5 # number of x variables 
pz = 5 # number of z variables
x <- matrix(rnorm(n*px), ncol = px)
z <- matrix(rnorm(n*pz), ncol = pz)

y <- x[,1] + x[,5] + 2*z[,1] + 3*rnorm(n) # generate response
penalty <- c(rep(1, px), rep(0, pz)) # penalty factor

plot(glmnet::glmnet(cbind(x,z), y, penalty.factor = penalty))

Обратите внимание, что на графике пути решения 5 переменных никогда не равны 0, потому что они никогда не наказываются.

введите здесь описание изображения

person sahir    schedule 13.12.2015