您可以使用您的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”值吗? –