glmnet()如何处理惩罚和非协作的协变量?

时间:2015-12-08 14:01:16

标签: glmnet lasso

是否有可能使用惩罚和非惩罚协变量进行套索模型?也就是说,我希望使用Y ~ gamma * X + beta * Z进行估算,其中X是n*p惩罚特征,Z是n*q未惩罚的连续或因子变量的协变量。

感谢。

1 个答案:

答案 0 :(得分:0)

vignette惩罚因素一节中明确说明。要确保某些变量不受惩罚,请将penalty.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,因为它们永远不会受到惩罚。

enter image description here