Je travaille sur des modèles de réseaux pour les réseaux politiques. L'une des choses que je fais est l'inférence pénalisée. J'utilise une approche de lasso adaptatif en définissant un facteur de pénalité pour glmnet. J'ai différents paramètres dans mon modèle: alphas
et phis
. Les alphas
sont des effets fixes donc je veux les garder dans le modèle pendant que les phis
sont pénalisés.Problème de convergence GLMNet pour la régression pénalisée
J'ai des coefficients de départ du processus d'estimation MLE de glm()
pour calculer les poids adaptatifs qui sont fixés par le facteur de pénalité de glmnet()
.
Voici le code:
# 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)
Pour certains réseaux ce code exécute très bien, mais j'ai certains réseaux pour lesquels je reçois ces erreurs:
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
La chose étrange est qu'ils tous utilisent le même code, donc je me demande si c'est un problème de données. Informations complémentaires:
+ Dans un cas, j'ai plus de 500 alphas
et 21 phis
et ces erreurs apparaissent, dans un autre cas qui ne fonctionne pas, j'ai 200 alphas
et 28 phis
. Mais d'autre part, j'ai un cas avec plus de 600 alphas
et 28 phis
et il converge bien. + J'ai essayé les réglages pour lambda.min.ratio
et nlambda
en vain.
Question supplémentaire: La première entrée de pénalité est-elle celle associée à l'interception? Ou est-il ajouté automatiquement par glmnet()
? Je n'ai pas trouvé de clarté à ce sujet dans la vignette glmnet
. Mes pensées sont que je ne devrais pas inclure un terme pour l'interception, puisqu'il est dit que la pénalité est remise à l'échelle interne pour additionner nvars
et je suppose que l'interception n'est pas une de mes variables.