您的系数存储在:
head(fit$beta[,1:6])
6 x 6 sparse Matrix of class "dgCMatrix"
s0 s1 s2 s3 s4 s5
cyl . -0.01192151 -0.1447790 -0.2658654 -0.376195 -0.4770942
disp . . . . . .
hp . . . . . .
drat . . . . . .
wt . -0.45776130 -0.7006176 -0.9218541 -1.123436 -1.3065806
qsec . . . . . .
你可以得到一个类似的情节:
plot(fit$beta, col = rep(1:nrow(fit$beta),ncol(fit$beta)),pch=20,cex=0.3)
![在此处输入图像描述](https://i.stack.imgur.com/3syXX.png)
所以假设我使用 lambda 值 s31 :
lambda_values = data.frame(name = colnames(fit$beta),fit$lambda)
subset(lambda_values,name=="s31")
name fit.lambda
32 s31 0.2877579
我们将矩阵拉到那个 lambda 值:
mat = fit$beta[,1:which(colnames(fit$beta)=="s31")]
并编写一个函数来返回第一个非零系数的索引,或者如果全部为零则返回最后一个:
first_nonzero = function(x){
if(any(x!=0)){
min(which(x!=0))
}else{
length(x)
}
}
将此应用于每一行,我们将获得他们首次输入的索引:
apply(mat,1,first_nonzero)
cyl disp hp drat wt qsec vs am gear carb
2 32 10 26 2 30 30 23 32 24