绘制岭回归 MSE 的交叉验证

Plotting cross validation of ridge regression's MSE

首先,我必须为我糟糕的英语道歉。其次,这个post的objective是我想用ggplot2而不是R中包含的函数plot重现岭回归的MSE图

cv.out 的对象由下一个表达式定义: cv.out <- cv.glmnet(x_var[train,], y_var[train], alpha = 0)。当我打印那个对象时,这些是 cv.out

的元素
Lambda Measure SE Nonzero
min 439.8 32554969 1044541 5
lse 1343.1 33586547 1068662 5

这是plot(cv.out)的情节:

我想用 ggplot 做同样的情节但更详细的事情,我不知道函数中有哪种美学。当我这样调用对象时,这些是 cv.out 的元素:cv.out$ :

最后,感谢您的帮助。我真的很感激。 :)

使用示例数据集:

X = as.matrix(mtcars[,-1])
y = as.matrix(mtcars[,1])
cv.out = cv.glmnet(X,y,alpha=0)
plot(cv.out)

您只需要提取值并放入 data.frame,然后使用 geom_point()geom_errorbar() 绘制:

df = with(cv.out,
     data.frame(lambda = lambda,MSE = cvm,MSEhi=cvup,MSElow=cvlo))

ggplot(df,aes(x=lambda,y=MSE)) + 
geom_point(col="#f05454") + 
scale_x_log10("log(lambda)") + 
geom_errorbar(aes(ymin = MSElow,ymax=MSEhi),col="#30475e") + 
geom_vline(xintercept=c(cv.out$lambda.1se,cv.out$lambda.min),
linetype="dashed")+
theme_bw()