Ich arbeite an Netzwerkmodellen für politische Netzwerke. Eine der Sachen, die ich tue, ist bestrafte Schlussfolgerung. Ich benutze einen adaptiven Lasso-Ansatz, indem ich einen Straffaktor für glmnet festlege. Ich habe verschiedene Parameter in meinem Modell: alphas
und phis
. Die alphas
sind feste Effekte, also möchte ich sie im Modell behalten, während die phis
bestraft werden.GLMNet Konvergenz Problem für die bestrafte Regression
Ich habe Start-Koeffizienten aus dem MLE-Schätzungsprozess von glm()
, um die adaptiven Gewichte zu berechnen, die durch den Penalty-Faktor von glmnet()
festgelegt werden.
Dies ist der 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)
Für einige Netzwerke dieser Code nur gut ausführt, jedoch habe ich bestimmte Netze, für die ich diese Fehler erhalten:
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
Das Seltsame ist, dass sie alle benutzen den gleichen Code, also frage ich mich, ob es ein Datenproblem ist. Zusätzliche Informationen:
+ In einem Fall habe ich über 500 alphas
und 21 phis
und diese Fehler auftreten, in einem anderen Fall, dass ich nicht 200 haben alphas
und 28 phis
funktioniert. Aber auf der anderen Seite habe ich einen Fall mit über 600 alphas
und 28 phis
und es konvergiert nett.
+ Ich habe Einstellungen für lambda.min.ratio
und nlambda
vergeblich versucht.
Zusätzliche Frage: Ist die erste Eingabe von Strafe die mit dem Abschnitt verbunden? Oder wird es automatisch von glmnet()
hinzugefügt? Ich habe keine Klarheit darüber in der Vignette glmnet
gefunden. Meine Gedanken sind, dass ich einen Begriff für den Abschnitt nicht einschließen sollte, da gesagt wird, dass die Strafe intern auf nvars
reszeniert wird, und ich nehme an, der Abschnitt ist nicht eine meiner Variablen.