同时多重套索回归在R

同时多重套索回归在R,r,for-loop,lasso-regression,R,For Loop,Lasso Regression,我试图在R中执行多重套索回归。为了计算模型的系数,我使用以下代码 library(glmnet) A <- as.matrix(data) fit_lasso <- glmnet(A[,-1] , A[,1] , standardize = TRUE , alpha = 0.9) #LASSO model print(fit_lasso) #LASSO model for different lambdas cvfit <- cv.glmnet( A[,-1] , A[,1]

我试图在R中执行多重套索回归。为了计算模型的系数,我使用以下代码

library(glmnet)
A <- as.matrix(data)
fit_lasso <- glmnet(A[,-1] , A[,1] , standardize = TRUE , alpha = 0.9) #LASSO model
print(fit_lasso) #LASSO model for different lambdas

cvfit <- cv.glmnet( A[,-1] , A[,1] , standardize = TRUE , type.measure = "mse" , nfolds = 5 , alpha = 0.9) 
cvfit    
cvfit$lambda.min
coef(cvfit , s = "lambda.min") 
glmnet(A[,-1],A[,1],…)
statement
A[,-1]
中,表示所有解释性的X变量和
A[,1]
响应Y变量。我想创建一个循环,计算并显示与上述所有可能变量组合相同的结果(例如,第一列作为响应变量,所有其他列作为解释变量,第二列作为响应变量,所有其他列作为解释变量)。使用
for语句
我设法创建了以下内容,但似乎不起作用。有人能帮我弄清楚吗

library(readxl)
data <-read_excel("example.xlsx")
data


library(glmnet)
A <- as.matrix(data)
for(i in 1:ncol(data)) fit_lasso[i] <- glmnet(A[,-i] , A[,i] , standardize = TRUE , alpha = 0.9)


for(i in 1:ncol(data)) cvfit[i] <- cv.glmnet( A[,-i] , A[,i] , standardize = TRUE , type.measure = "mse" , nfolds = 5 , alpha = 0.9) 


cvfit$lambda.min

coef(cvfit[i] , s = "lambda.min") 
库(readxl)
数据请尝试以下方法:

results <- lapply(seq_len(ncol(A)), function(i) {
  list(
    fit_lasso = glmnet(A[, -i], A[, i], standardize = T, alpha = 0.9), 
    cvfit = cv.glmnet(A[, -i] , A[, i] , standardize = TRUE , type.measure = "mse" , nfolds = 5 , alpha = 0.9)
  )
})
输出

> results[[3L]]$cvfit$lambda.min
[1] 1.542775
> coef(results[[3L]]$cvfit, s = "lambda.min") 
11 x 1 sparse Matrix of class "dgCMatrix"
                      1
(Intercept)  52.7322579
mpg           .        
cyl          15.1087471
hp            0.5848973
drat          .        
wt           72.9452152
qsec         -9.1803140
vs          -11.6195183
am            .        
gear          .        
carb        -23.8347410

谢谢,这似乎很管用。是否只输出所有案例的coef表?像一个没有其他信息的人一样?@nickolakis尝试这个
lappy(结果,函数(x)coef(x$cvfit,s=“lambda.min”)
谢谢你的帮助。事实上,laply司令部完全按照我的要求行事。有没有办法从这些列表中删除零变量?只包含非零值变量?@nickolakis
lappy(结果、函数(x,fun)fun(coef(x$cvfit,s=“lambda.min”)、函数(x)x[x[,1L]!=0L,1L,drop=FALSE])
# Must use "[[" and "]]" here. 
results[[3L]]$cvfit$lambda.min
coef(results[[3L]]$cvfit, s = "lambda.min") 
> results[[3L]]$cvfit$lambda.min
[1] 1.542775
> coef(results[[3L]]$cvfit, s = "lambda.min") 
11 x 1 sparse Matrix of class "dgCMatrix"
                      1
(Intercept)  52.7322579
mpg           .        
cyl          15.1087471
hp            0.5848973
drat          .        
wt           72.9452152
qsec         -9.1803140
vs          -11.6195183
am            .        
gear          .        
carb        -23.8347410