我试图用glmnet拟合泊松模型,我知道很多参数必须包含在模型中,然后才能实现。我将其惩罚因子设置为0.不幸的是,glmnet因收敛的参数数量很高而存在收敛问题。以下是glmnet手册中的一个示例,如果unpenalized参数的数量很高,算法就不会收敛。
library(glmnet)
N=500; p=300
nzc=5
x=matrix(rnorm(N*p),N,p)
beta=rnorm(nzc)
f = x[,seq(nzc)]%*%beta
mu=exp(f)
y=rpois(N,mu)
pena=rep(0,ncol(x))
pena[1:10]=1 # penalized only the first ten parameters
fit=glmnet(x,y,family="poisson",penalty.factor=pena,alpha=0.9)
# fit is not converging
pena=rep(0,ncol(x))
pena[1:250]=1 # penalized the first 250 parameters
fit=glmnet(x,y,family="poisson",penalty.factor=pena,alpha=0.9)
# fit is converging
我知道该模型对此示例没有意义,但至少我可以重现与我的数据相同的错误。看起来lambda_max设置为无穷大。这是否意味着算法无法找到最小的lambda_max,其中所有惩罚参数都为零?如何使用许多参数非自动化的模型?
非常感谢