我正在研究政治网络的网络模型。我正在做的一件事是惩罚推理。我通过为 glmnet 设置惩罚因子来使用自适应套索方法。我的模型中有各种参数:alphas
和phis
. 它们是固定效果,alphas
所以我想在phis
受到惩罚时将它们保留在模型中。
我有来自 MLE 估计过程的起始系数glm()
来计算通过 的惩罚因子设置的自适应权重glmnet()
。
这是代码:
# Generate Generalized Linear Model
GenLinMod = glm(y ~ X, family = "poisson")
# Set coefficients
coefficients = coef(GenLinMod)
# Set penalty
penalty = 1/(coefficients[-1])^2
# Protect alphas
penalty[1:(n-1)] = 0
# Generate Generalized Linear Model with adaptive lasso procedure
GenLinModNet = glmnet(XS, y, family = "poisson", penalty.factor = penalty, standardize = FALSE)
对于某些网络,此代码执行得很好,但是我有某些网络会出现以下错误:
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
奇怪的是它们都使用相同的代码,所以我想知道这是否是数据问题。附加信息:
+在一种情况下,我有超过 500alphas
和 21并且出现了这些错误,在另一种情况下,我有 200和 28phis
不起作用。但另一方面,我有一个超过 600和 28的案例,它收敛得很好。alphas
phis
alphas
phis
+我已经尝试过设置lambda.min.ratio
但nlambda
无济于事。
附加问题:罚分的第一个条目是否与拦截相关联?还是由 自动添加glmnet()
?我没有在glmnet
小插图中找到关于这一点的明确说明。我的想法是我不应该包含拦截的术语,因为据说惩罚在内部重新调整为总和nvars
,我认为拦截不是我的变量之一。