0

我正在研究政治网络的网络模型。我正在做的一件事是惩罚推理。我通过为 glmnet 设置惩罚因子来使用自适应套索方法。我的模型中有各种参数:alphasphis. 它们是固定效果,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的案例,它收敛得很好。alphasphisalphasphis

+我已经尝试过设置lambda.min.rationlambda无济于事。

附加问题:罚分的第一个条目是否与拦截相关联?还是由 自动添加glmnet()?我没有在glmnet小插图中找到关于这一点的明确说明。我的想法是我不应该包含拦截的术语,因为据说惩罚在内部重新调整为总和nvars,我认为拦截不是我的变量之一。

4

1 回答 1

0

我不是 100% 确定这一点,但我想我已经找到了问题的根源。

我尝试使用各种手动 lambda 序列,甚至尝试使用非常大的起始 lambda(1000 个)。这一切似乎都没有什么好处。但是,当我尝试不惩罚 alpha 时,一切都会很好地收敛。所以它可能与未惩罚变量的数量有关。也许将所有 alpha 的不受惩罚的力量 glmnet 保持在某种不同的状态。也许存在某种共线性。我的“解决方案”,基本上只是在做其他事情,是以与 phi 之一相同的重量来惩罚 alpha。这是在假设某些 phi 很重要并且 alpha 可以同样重要,而不是固定的(这使得它们无限重要)的假设下起作用的。我并不完全满意,

另外,要回答我的另一个问题:在 glmnet 小插图中,它说惩罚项在内部重新调整为总和到 nvars。由于截距不是变量之一,我的猜测是在惩罚项中不需要它。虽然,我尝试过包括和排除这个词,结果似乎是一样的。因此,如果 glmnet 检测到长度为应有长度的 +1,则可能会自动将其删除。

于 2017-01-30T09:07:30.210 回答