如何计算套索回归的交叉验证R2?

如何计算套索回归的交叉验证R2?,r,regression,glmnet,lasso-regression,R,Regression,Glmnet,Lasso Regression,我使用这段代码来拟合一个使用套索回归的模型 library(glmnet) IV1 <- data.frame(IV1 = rnorm(100)) IV2 <- data.frame(IV2 = rnorm(100)) IV3 <- data.frame(IV3 = rnorm(100)) IV4 <- data.frame(IV4 = rnorm(100)) IV5 <- data.frame(IV5 = rnorm(100)) DV <- data.fra

我使用这段代码来拟合一个使用套索回归的模型

library(glmnet)
IV1 <- data.frame(IV1 = rnorm(100))
IV2 <- data.frame(IV2 = rnorm(100))
IV3 <- data.frame(IV3 = rnorm(100))
IV4 <- data.frame(IV4 = rnorm(100))
IV5 <- data.frame(IV5 = rnorm(100))
DV <- data.frame(DV = rnorm(100))

data<-data.frame(IV1,IV2,IV3,IV4,IV5,DV)

x <-model.matrix(DV~.-IV5 , data)[,-1]
y <- data$DV

AB<-glmnet(x=x, y=y, alpha=1)
plot(AB,xvar="lambda")

lambdas = NULL
for (i in 1:100)
{
  fit <- cv.glmnet(x,y)
  errors = data.frame(fit$lambda,fit$cvm)
  lambdas <- rbind(lambdas,errors)
}

lambdas <- aggregate(lambdas[, 2], list(lambdas$fit.lambda), mean)


bestindex = which(lambdas[2]==min(lambdas[2]))
bestlambda = lambdas[bestindex,1]


fit <- glmnet(x,y,lambda=bestlambda)

谁能给我指出正确的方向吗?这是根据训练数据计算R2的最佳方法吗?

函数glmnet不会在拟合时返回cvm

?glmnet
您要做的是使用cv.glmnet

?cv.glmnet 
以下工作(注意,您必须指定多个lambda,或者让它计算出来)


fit非常感谢您的回复!你介意详细说明这是如何与两个lambda一起工作的吗?最终型号是否有两个不同的lambda分别进行优化?再次感谢您的回复。我想做的是测量最终变得合适的模型的R2。您介意解释一下代码中发生了什么吗?它似乎为每个迭代计算R2,但仍然有一个λ?你介不介意解释一下为什么这能帮你得到R2?这就是最终被选中的带有lambda的模型的R2吗?
?glmnet
?cv.glmnet 
fit <- cv.glmnet(x,y,lambda=lambdas[,1])

r2<-max(1-fit$cvm/var(y))
for (i in 1:100)
{
  fit <- cv.glmnet(x,y)
  errors = data.frame(fit$lambda,fit$cvm)
  lambdas <- rbind(lambdas,errors)
  r2[i]<-max(1-fit$cvm/var(y))
}

lambdas <- aggregate(lambdas[, 2], list(lambdas$fit.lambda), mean)


bestindex = which(lambdas[2]==min(lambdas[2]))
bestlambda = lambdas[bestindex,1]
r2[bestindex]