我正在尝试通过在 glmnet 包中使用 LASSO 来运行逻辑回归。我需要强制模型包含某些参数。但是,我得到了一个错误。
> cv.lasso = cv.glmnet(x,y,family="binomial",alpha = 1,penalty.factor = penalty)
Error: Matrices must have same number of columns in rbind2(.Call(dense_to_Csparse, x), y)
In addition: Warning messages:
1: from glmnet Fortran code (error code -1); Convergence for 1th lambda value not reached after maxit=100000 iterations; solutions for larger lambdas returned
2: In getcoef(fit, nvars, nx, vnames) :
an empty model has been returned; probably a convergence issue
x 有 95 个变量,它们都是二进制(0 或 1)。我必须强制包含 3 个变量,所以我将它们的惩罚因子设置为 0。
> penalty
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[75] 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1
如果我删除penalty.factor
,它会起作用,但我必须强制包含这三个变量。但是,当我 keeppenalty.factor
和 remove时family = "binomial"
,它正在运行,但它不再是二元逻辑回归。有谁知道如何修理它?
编辑:由于我没有解决方案并且面临尽快显示结果的压力,我选择使用 LASSO 选择的变量与这三个强制性变量相结合来运行常规 logit 回归。不知何故,我认为这样做会有一个问题......
谢谢!