#r #ggplot2 #plot #regression #glmnet
#r #ggplot2 #построение #регрессия #glmnet
Вопрос:
прежде всего, я должен извиниться за мой плохой английский. Во-вторых, цель этого поста состоит в том, что я хочу воспроизвести график MSE регрессии хребта с помощью ggplot2 вместо функции plot
, которая включена в R.
Объект cv.out
определяется следующим выражением: cv.out <- cv.glmnet(x_var[train,], y_var[train], alpha = 0)
. И когда я печатаю этот объект, это элементы cv.out
Лямбда — выражение | Измерять | SE | Ненулевое значение | |
---|---|---|---|---|
мин | 439.8 | 32554969 | 1044541 | 5 |
lse | 1343.1 | 33586547 | 1068662 | 5 |
Это сюжет с plot(cv.out)
:
Дело в том, что я хочу сделать тот же сюжет, но более проработанный, ggplot
и я не знаю, какая эстетика заложена в функцию. Это элементы cv.out, когда я вызываю объект следующим образом: cv.out$
:
- лямбда — выражение
- cmv
- cvsd
- cvup
- cvlo
- nzero
- вызов
- Имя
- lambda.min
- lambda.lse
Наконец, спасибо за вашу помощь. Я действительно ценю это. 🙂
Ответ №1:
Использование примера набора данных:
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()