我正在将cv.ncvreg
与Lasso
配合使用SCAD
。由于我需要使用交叉验证来选择lambda
,因此我选择使用cv.ncvreg
函数。我在下面给出了r
代码。
library(ncvreg)
n = 100
p = 10
beta0 = c(2, 0, 3, 0, 0, 1, 0, 0, 0, 0)
X = matrix(rnorm(n * p, 0,1), ncol = p)
y=vector(mode="numeric",length=n)
X[,3]=rnorm(n,2,1)
X[,4]=rnorm(n,4,1)
X[,5]=rnorm(n,5,1)
ei_N=rnorm(n,0,1) # the model errors
y= X%*%beta0 + ei_N
fit = cv.ncvreg(X, y, penalty = "SCAD", standardize=TRUE)
coef = coef(fit, s = "lambda.min")
coef
我获得以下输出
(Intercept) V1 V2 V3 V4 V5 V6 V7
0.06907783 1.98544923 0.00000000 3.01165615 0.00000000 0.00000000 1.00447815 0.00000000
V8 V9 V10
0.00000000 0.00000000 0.00000000
如果看到输出,则拟合的模型具有intercept
。在交叉验证以选择lasso
的同时如何在没有SCAD
的情况下使intercept
受到lambda
惩罚?谢谢。