[英]Simultaneously multiple LASSO regressions in R
我正在嘗試在 R 中執行多個LASSO 回歸。要計算模型的系數,我使用以下代碼
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")
這導致(除其他外)以下
> coef(cvfit , s = "lambda.min")
15 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -4.455556e+02
X2 .
X3 2.869015e-05
X4 2.325949e-10
X5 .
X6 5.955569e+00
X7 .
X8 1.043362e+01
X9 .
X10 3.313007e-01
X11 .
X12 .
X13 .
X14 2.129794e-01
X15 .
在glmnet(A[,-1] , A[,1] , ...)
語句中, A[,-1]
表示所有解釋性X變量, A[,1]
表示響應Y變量。 我想創建一個循環,為所有可能的變量組合計算並顯示與上述相同的結果(例如,第一列作為響應變量,所有其他列作為解釋變量,第二列作為響應變量,所有其他列作為解釋性的)。 使用for statement
我設法創建了以下內容,這似乎不起作用。 有人可以幫我弄清楚嗎?
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")
試試這個:
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)
)
})
要獲得一組結果:
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.