Как зациклить glm

#r #machine-learning #glmnet

Вопрос:

Я хочу сделать петлю риджа и лассо 100 раз, чтобы получить 100 mse и mspe. Моя конечная цель — нарисовать схему, чтобы сравнить эти 100 значений. Я сделал одну регрессионную модель, но я не знаю, как повторить эту модель. Как я мог получить значения и диаграммы?

Комментарии:

1. Я думаю, что мой вопрос неполон. но я просто хочу знать , как зациклить эту модель, а не конкретные коды.

2. Что у тебя betas.true ?

3. бета.true=c(повторение(0,5, 10),повторение(0,P-10)) и p=50

4. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Ответ №1:

Вы можете попробовать следующее:

 ntimes <- 100

res <- 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()
 

чтобы получить визуализацию, подобную следующей:

введите описание изображения здесь