Как я могу заставить cv.glmnet не удалять одну конкретную переменную?

Я запускаю регрессию с 67 наблюдениями и 32 переменными. Я делаю выбор переменных, используя функцию cv.glmnet из пакета glmnet. Есть одна переменная, которую я хочу принудительно включить в модель. (Оно удаляется во время обычной процедуры.) Как указать это условие в cv.glmnet?

Благодарю вас!

Мой код выглядит следующим образом:

glmntfit <- cv.glmnet(mydata[,-1], mydata[,1])
coef(glmntfit, s=glmntfit$lambda.1se)

И переменная, которую я хочу, это mydata[,2].


person lareven    schedule 10.06.2014    source источник


Ответы (1)


Этого можно достичь, предоставив вектор penalty.factor, как описано в разделе ?glmnet. Штрафной коэффициент 0 указывает на то, что «переменная всегда включается в модель», тогда как 1 используется по умолчанию.

glmntfit <- cv.glmnet(mydata[,-1], mydata[, 1], 
                      penalty.factor=c(0, rep(1, ncol(mydata) - 2)))
person jbaums    schedule 11.06.2014
comment
penalty.factor = (names(mydata)[1:...] == 'VAR_TO_PENALIZE') будет более элегантным способом выбрать эту переменную. - person smci; 17.06.2015
comment
Есть ли вероятность того, что даже после установки Penal.factor переменной в 0 она все равно не будет принудительно включена в модель? - person melwin_jose; 08.07.2017