我想对ridge和lasso进行100次循环以获得100个mse和mspe。我的最终目标是绘制一个箱线图来比较这些100个值。我已经建立了一个回归模型,但不知道如何重复这个模型。我该如何获取这些值并绘制箱线图呢?
回答:
你可以尝试以下方法:
ntimes <- 100res <- replicate(ntimes, { cv.rr <- cv.glmnet(x=as.matrix(train[,-1]),y=as.numeric(train[,1]),alpha=0,nfolds=10,nlambda=100, intercept=FALSE) lambda.rr=cv.rr$lambda.min mse.rr <- mean((coef(cv.rr)[-1] - betas.true)^2) yhat.rr <- predict(cv.rr,s="lambda.min",newx=as.matrix(test[,-1])) mspe.rr <- mean((test[,1]-yhat.rr)^2) list(mse=mse.rr, mspe=mspe.rr) })library(tidyverse)res_df <- as.data.frame(apply(res, 1, function(x) unlist(x)))names(res_df) <- c('mse', 'mspe')res_df %>% gather(key='metric', value='value') %>% ggplot(aes(value, fill=metric)) + geom_boxplot()
以获得如下所示的可视化效果: