在R中的glmnet图中的曲线上添加标签

rns*_*nso 7 plot r glmnet

我正在使用glmnet包从mtcars数据集获取以下图表(其他变量的mpg回归):

library(glmnet)
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
plot(fit, xvar='lambda')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何在每条曲线的开头或最大y点(远离x轴的最大值)处为每条曲线添加变量名称?我尝试过,我可以像往常一样添加图例但不是每条曲线或开头的标签.谢谢你的帮助.

Ste*_*row 7

另一种方法是plotmo 包中的 plot_glmnet函数 。它会自动定位变量名并有一些其他的花里胡哨。例如,下面的代码

library(glmnet)
mod <- glmnet(as.matrix(mtcars[-1]), mtcars[,1])
library(plotmo) # for plot_glmnet
plot_glmnet(mod)
Run Code Online (Sandbox Code Playgroud)

阴谋

变量名称被展开以防止过度绘制,但我们仍然可以确定哪个曲线与哪个变量相关联。更多的例子可以在第 6 章的plotres 小插图中找到, 它包含在 plotmo 包中。


use*_*945 4

由于标签是硬编码的,因此编写快速函数可能更容易。这只是一个快速的镜头,因此可以更改得更彻底。我还想指出,使用套索时通常有很多变量,因此标签会有很多重叠(如您的小示例中所示)

lbs_fun <- function(fit, ...) {
        L <- length(fit$lambda)
        x <- log(fit$lambda[L])
        y <- fit$beta[, L]
        labs <- names(y)
        text(x, y, labels=labs, ...)
}

# plot
plot(fit, xvar="lambda")

# label
lbs_fun(fit)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述