我试图使用 glmnet 包在具有二进制结果(logit)的模型上拟合套索(L1 惩罚)。我的预测变量都是二进制的(它们是 1/0 未排序的,~4000),除了一个连续变量。我需要将预测变量转换为稀疏矩阵,因为它需要永远和一天。我的问题是:似乎人们正在使用 sparse.model.matrix 而不仅仅是将他们的矩阵转换为稀疏矩阵。这是为什么?我需要在这里做吗?两种方法的结果略有不同。
另外,我的因子是否需要编码为因子(当涉及到结果和预测变量时)或者使用稀疏矩阵并在 glmnet 模型中指定结果是二项式就足够了?
这是我到目前为止所做的
#Create a random dataset, y is outcome, x_d is all the dummies (10 here for simplicity) and x_c is the cont variable
y<- sample(c(1:0), 200, replace = TRUE)
x_d<- matrix(data= sample(c(1:0), 2000, replace = TRUE), nrow=200, ncol=10)
x_c<- sample(60:90, 200, replace = TRUE)
#FIRST: scale that one cont variable.
scaled<-scale(x_c,center=TRUE, scale=TRUE)
#then predictors together
x<- cbind(x_d, scaled)
#HERE'S MY MAIN QUESTION: What i currently do is:
xt<-Matrix(x , sparse = TRUE)
#then run the cross validation...
cv_lasso_1<-cv.glmnet(xt, y, family="binomial", standardize=FALSE)
#which gives slightly different results from (here the outcome variable is in the x matrix too)
xt<-sparse.model.matrix(data=x, y~.)
#then run CV.
所以总结我的两个问题是:1-即使我的因子只是二进制而不是有序的,我是否需要使用 sparse.model.matrix?[如果是的话,它实际上与仅将矩阵转换为稀疏矩阵有什么不同] 2-我需要将二进制变量编码为因子吗?我问的原因是我的数据集很大。无需编码即可节省大量时间。