您可以使用您的model.matrix
做出因素虛擬變量。
我創建了一個data.frame。 y是目標變量。
create_factor <- function(nb_lvl, n= 100){
factor(sample(letters[1:nb_lvl],n, replace = TRUE))}
df <- data.frame(var1 = create_factor(5),
var2 = create_factor(5),
var3 = create_factor(5),
var4 = create_factor(5),
var5 = rnorm(100),
y = create_factor(2))
# var1 var2 var3 var4 var5 y
# 1 a c c b -0.58655607 b
# 2 d a e a 0.52151994 a
# 3 a b d a -0.04792142 b
# 4 d a a d -0.41754957 b
# 5 a d e e -0.29887004 a
選擇所有因子變量。我用dplyr::select_if
然後解析 變量名就可以像y ~ var1 + var2 +var3 +var4
library(dplyr)
library(stringr)
library(glmnet)
vars_name <- df %>%
select(-y) %>%
select_if(is.factor) %>%
colnames() %>%
str_c(collapse = "+")
model_string <- paste("y ~",vars_name)
的表達model.matrix
創建虛擬變量。不要忘記as.formula
強制字符公式。
x_train <- model.matrix(as.formula(model_string), df)
適合你的模型。
lasso_model <- cv.glmnet(x=x_train,y = df$y, family = "binomial", alpha=1, nfolds=10)
該代碼可以簡化。但這個想法在這裏。
使用'model.matrix'創建預測矩陣,它將使用虛擬變量重新編碼您的因子變量。你可能也想看一下組套索 – user20650
因此,使用hdx <-model.matrix(〜。,data = xdata,contrasts.arg = sapply(xdata,is.factor))我能夠做到這一點,但然後將其插入lars()給我的錯誤「錯誤在if(any(nosignal)){:缺少值,其中TRUE/FALSE需要」。我不知道如果(任何(nosignal))在哪裏,但它不是我故意運行的任何代碼。我不完全熟悉套索的內部運作,所以很抱歉。 – Alex
到目前爲止,但我們需要一個可重複的例子來幫助你更遠。下面的例子使用'lars(x = x_train,y = df $ var5)'似乎工作正常。你的輸入數據中有「NA」值嗎? –