2015-06-01 25 views
3

glmnet圖例標籤錯誤,我從這個職位(Adding labels on curves in glmnet plot in R)修改函數傳說添加到情節如下:與R中

library(glmnet) 
fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1]) 

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, ...) 
     legend('topright', legend=labs, col=1:length(labs), lty=1) # <<< ADDED BY ME 
} 
plot(fit, xvar="lambda") 
lbs_fun(fit) 

enter image description here

但是,我得到的文本之間的不匹配情節和傳說中的標籤。變量「am」顯然顏色不正確。錯誤在哪裏?謝謝你的幫助。

回答

4

plot(fit, xvar="lambda")利用函數matplot。默認情況下,matplot使用6種顏色並回收它們。所以,你必須創建相應的傳說:

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, ...) 
     legend('topright', legend=labs, col=1:6, lty=1) # only 6 colors 
} 

enter image description here

+0

我認爲這是在我有超過6個變量後爲我錯誤標記顏色。 – Hatshepsut

1

您可以在plot調用指定的顏色,以配合你找了傳奇色彩:

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, ...) 
     legend('topright', legend=labs, col=1:length(labs), lty=1) # <<< ADDED BY ME 
} 
plot(fit, xvar="lambda", col=1:dim(coef(fit))[1]) 
lbs_fun(fit) 

enter image description here