![](/img/trans.png)
[英]How to obtain standardized regression coefficients for bootstrapped models or models with robust SE in R
[英]How to capture the most important variables in Bootstrapped models in R?
我有幾個模型,我想比較它們對同一數據集的重要預測變量的選擇,Lasso 就是其中之一。 我使用的數據集包含人口普查數據和大約一千個變量,為了方便起見,這些變量已重命名為“x1”、“x2”等(原始名稱非常長)。 我想報告最重要的特性,然后用更短更簡潔的名稱重命名這些變量。
我試圖解決這個問題是通過提取每個迭代 model 中的頂級變量,將其放入列表中,然后在 X 次循環中找到頂級變量的平均值。 但是,我的問題是我仍然發現前 10 個最常用的預測變量存在可變性,因此我無法手動更改變量名稱,因為每次在代碼塊上運行都會產生不同的結果。 我懷疑這是因為我的分析中有太多變量,並且由於 CV 導致每次引導都會創建新模型。
為了一個簡單的例子,我使用了 mtcars 並將尋找前 3 個最常見的預測變量,因為這個數據集中只有 10 個變量。
library(glmnet)
data("mtcars") # Base R Dataset
df <- mtcars
topvar <- list()
for (i in 1:100) {
# CV and Splitting
ind <- sample(nrow(df), nrow(df), replace = TRUE)
ind <- unique(ind)
train <- df[ind, ]
xtrain <- model.matrix(mpg~., train)[,-1]
ytrain <- df[ind, 1]
test <- df[-ind, ]
xtest <- model.matrix(mpg~., test)[,-1]
ytest <- df[-ind, 1]
# Create Model per Loop
model <- glmnet(xtrain, ytrain, alpha = 1, lambda = 0.2)
# Store Coeffecients per loop
coef_las <- coef(model, s = 0.2)[-1, ] # Remove intercept
# Store all nonzero Coefficients
topvar[[i]] <- coef_las[which(coef_las != 0)]
}
# Unlist
varimp <- unlist(topvar)
# Count all predictors
novar <- table(names(varimp))
# Find the mean of all variables
meanvar <- tapply(varimp, names(varimp), mean)
# Return top 3 repeated Coefs
repvar <- novar[order(novar, decreasing = TRUE)][1:3]
# Return mean of repeated Coefs
repvar.mean <- meanvar[names(repvar)]
repvar
現在,如果您要重新運行上面的代碼塊,您會注意到前 3 個變量發生了變化,因此如果我必須重命名這些變量,如果它們不是常量並且每次運行都在變化,那將很難做到。 關於我如何處理這個問題有什么建議嗎?
您可以使用 function set.seed() 來確保您的樣本每次都會返回相同的樣本。 例如
set.seed(123)
當我將它添加到上面的代碼然后運行兩次時,兩次都返回以下內容:
wt carb hp
98 89 86
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.