glmnet() 如何处理受惩罚和未受惩罚的协变量?
How does glmnet() handle with both penalized and unpenalized covariates?
是否可以用惩罚和非惩罚协变量做套索模型?也就是说,我想用 Y ~ gamma * X + beta * Z
进行估计,其中 X 是 n*p
惩罚特征,Z 是 n*q
连续或因子变量的未惩罚协变量。
谢谢。
vignette 在 惩罚因素 部分下明确说明。为确保某些变量不受惩罚,请将 penalty.factor 设置为 0。您只需要创建一个长度为 ncol(X) + ncol(Z)
的向量,其中第一个 ncol(X)
条目为 1(或任何非零正数number) 和其他 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,因为它们永远不会受到惩罚。
是否可以用惩罚和非惩罚协变量做套索模型?也就是说,我想用 Y ~ gamma * X + beta * Z
进行估计,其中 X 是 n*p
惩罚特征,Z 是 n*q
连续或因子变量的未惩罚协变量。
谢谢。
vignette 在 惩罚因素 部分下明确说明。为确保某些变量不受惩罚,请将 penalty.factor 设置为 0。您只需要创建一个长度为 ncol(X) + ncol(Z)
的向量,其中第一个 ncol(X)
条目为 1(或任何非零正数number) 和其他 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,因为它们永远不会受到惩罚。