很抱歉,我无法在此处提供可复制的代码或数据,我只是在寻找可以帮助我了解如何使R中的glmnet更好地工作的人。
我有一个很大的数据集,其中包含很多变量,我已经知道其中一些应该包含在“完美”模型中。但是我希望glmnet为我挑选出最佳变量。
我的数据称为:Data
,响应变量称为resp
,我有一列用来对响应变量进行加权,因为这是泊松回归,权重称为{{1} }。
当我删除响应变量并使用所有可用变量时,我得到:
weight
如果我检查library(glmnet)
resp_variables = c("resp", "weight")
x_train <- model.matrix( ~ .-1, Data[,!colnames(Data) %in% resp_variables]) #191 columns
y_train <- Data$resp
weight <- Data$weight
cvfit <- glmnet::cv.glmnet(x_train, y_train, intercept=FALSE, family="poisson",standardize=TRUE, alpha=1, weights = weight)
或`coef(cvfit,s =“ lambda.1se”),则不包含没有变量。
另一方面,如果我只是手动选择三个变量:
coef(cvfit, s = "lambda.min")
如果我选中cvfit <- glmnet::cv.glmnet(model.matrix(~Data$var1+ Data$var2+ Data$var3-1), Data[,"resp"], weights = Data$weight, standardize=TRUE, alpha=1)
,则会包含所有变量,但是当我使用`coef(cvfit,s =“ lambda.1se ”)。
为什么在同时评估所有变量的第一次尝试中不包含这三个变量,我该怎么做才能使尝试更可靠?
编辑:忘了说我有很多数据,即30,000行。
EDIT 2 :似乎当我添加越来越多的变量时,系数变得越来越小...