[R] running crossvalidation many times MSE for Lasso regression

David Winsemius dw|n@em|u@ @end|ng |rom comc@@t@net
Wed Nov 1 07:08:37 CET 2023



> On Oct 22, 2023, at 4:01 PM, Bert Gunter <bgunter.4567 using gmail.com> wrote:
> 
> No error message shown Please include the error message so that it is
> not necessary to rerun your code. This might enable someone to see the
> problem without running the code (e.g. downloading packages, etc.)
> 
> -- Bert
> 
> On Sun, Oct 22, 2023 at 1:36 PM varin sacha via R-help
> <r-help using r-project.org> wrote:
>> 
>> Dear R-experts,
>> 
>> Here below my R code with an error message. Can somebody help me to fix this error?
>> Really appreciate your help.
>> 
>> Best,
>> 
>> ############################################################
>> # MSE CROSSVALIDATION Lasso regression
>> 
>> library(glmnet)
>> 
>> 
>> x1=c(34,35,12,13,15,37,65,45,47,67,87,45,46,39,87,98,67,51,10,30,65,34,57,68,98,86,45,65,34,78,98,123,202,231,154,21,34,26,56,78,99,83,46,58,91)
>> x2=c(1,3,2,4,5,6,7,3,8,9,10,11,12,1,3,4,2,3,4,5,4,6,8,7,9,4,3,6,7,9,8,4,7,6,1,3,2,5,6,8,7,1,1,2,9)
>> y=c(2,6,5,4,6,7,8,10,11,2,3,1,3,5,4,6,5,3.4,5.6,-2.4,-5.4,5,3,6,5,-3,-5,3,2,-1,-8,5,8,6,9,4,5,-3,-7,-9,-9,8,7,1,2)
>> T=data.frame(y,x1,x2)
>> 
>> z=matrix(c(x1,x2), ncol=2)
>> cv_model=glmnet(z,y,alpha=1)
>> best_lambda=cv_model$lambda.min
>> best_lambda
>> 
>> 
>> # Create a list to store the results
>> lst<-list()
>> 
>> # This statement does the repetitions (looping)
>> for(i in 1 :1000) {
>> 
>> n=45
>> 
>> p=0.667
>> 
>> sam=sample(1 :n,floor(p*n),replace=FALSE)
>> 
>> Training =T [sam,]
>> Testing = T [-sam,]
>> 
>> test1=matrix(c(Testing$x1,Testing$x2),ncol=2)
>> 
>> predictLasso=predict(cv_model, newx=test1)
>> 
>> 
>> ypred=predict(predictLasso,newdata=test1)

The error I got was:

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('matrix', 'array', 'double', 'numeric')"


I'm not sure why the name of the object was cv_model since it was not created as a cross-validation result.

The loops called predict() twice and it was the second call that produced the error since the predictLasso object was not a glmnet classed object.

If the OP had left out the second use of predict and then subtracted predictLasso from the y vector a result would have appeared

y=T[-sam,]$y
MSE = mean((y-predictLasso)^2)
...
> mean(unlist(lst))
[1] 23.39621

Whether this is meaningful is hard to tell. It also makes the fundamental error of overwriting the original data object `y` with another intermediate result.

-- 
David
>> y=T[-sam,]$y
>> 
>> MSE = mean((y-ypred)^2)
>> MSE
>> lst[i]<-MSE
>> }
>> mean(unlist(lst))
>> ##################################################################
>> 
>> 
>> 
>> 
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list