Я попытался запустить ваш код, и я нашел решение.
Первый
В вашем коде нет xtest
и ytest
.
Итак, я сделалслучайным образом
Секунда
listx
должны быть результатами, которые сохранили ваши результаты, а не итерацией !!
Я изменил listx
в for
операторе на iter
Третий
Я назначил результаты в список listx
.После итерации я использовал rbindlist
, чтобы сделать его data.frame
классом.В моем коде я повторяю это 10
раз, а не 500
просто для моего удобства !!
library(glmnet)
library(data.table)
#Generación de muestra de entrenamiento
ne <- 100
pe <- 100
listx<-list()
for(iter in 1:10) {
xtrain <- matrix (rnorm(ne*pe), ne, pe)
ytrain <- apply(xtrain[,1:pe], 1, sum) + rnorm(ne)
xtest <- matrix (rnorm((ne-50)*(pe)), ne-50)
ytest <- apply(xtest[,1:(pe-50)], 1, sum) + rnorm(ne-50)
olsreg <- lm(ytrain~xtrain)
ridgereg <-cv.glmnet(xtrain, ytrain, type.measure = "mse", alpha=0, family="gaussian")
ridgeregpr <- predict(ridgereg, s=ridgereg$lambda.min, newx=xtest)
mseridge <-mean((ytest-ridgeregpr)^2)
lassoreg <-cv.glmnet(xtrain, ytrain, type.measure = "mse", alpha=1, family="gaussian")
lassoregpr <- predict(lassoreg, s=lassoreg$lambda.min, newx=xtest)
mselasso <-mean((ytest-lassoregpr)^2)
listx[[iter]] = data.frame(mseridge = mseridge,
mselasso = mselasso)
}
results <- rbindlist(listx)
Результаты показаны ниже
> results
mseridge mselasso
1: 36.36702 42.04854
2: 44.73392 81.36519
3: 40.37621 75.39565
4: 42.75282 61.04850
5: 42.30007 55.44008
6: 55.58605 76.35885
7: 38.62277 36.18105
8: 36.77701 69.17898
9: 56.83311 75.61917
10: 33.56595 66.23441