2014-02-18 22 views
7

Ich versuche, ein Modell mit glmnet zu erstellen, (derzeit mit cv, um den Lambda-Wert zu finden), und ich bekomme einen Fehler NA/NaN/Inf in foreign function call (arg 5). Ich glaube, das hat etwas mit den NA-Werten in meinem Datensatz zu tun, denn wenn ich alle Datenpunkte mit NAs lösche, wird der Befehl erfolgreich ausgeführt.R Fehler in glmnet: NA/NaN/Inf in fremden Funktionsaufruf

Ich hatte den Eindruck, dass glmnet kann NA-Werte verarbeiten. Ich bin nicht sicher, wo der Fehler herkommt:

> res <- cv.glmnet(features.mat, as.factor(tmp[,"outcome"]), family="binomial") 
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, : 
    NA/NaN/Inf in foreign function call (arg 5) 

Der Datensatz sieht wie folgt aus:

> head(features.mat) 
6 x 8 sparse Matrix of class "dgCMatrix" 
    a b c e f g h i 
1 1 1 138 NA NA 15 NA . 
4 1 3 171 NA NA 17 NA . 
7 1 1 156 NA NA 5 NA . 
8 1 4 97 NA NA 7 NA . 
9 1 1 219 NA NA 11 NA . 
10 1 . 263 NA NA 20 NA . 
> head(as.factor(tmp[,"outcome"])) 
[1] 0 0 0 0 0 0 
Levels: 0 1 

Antwort

6

Es scheint, dass glmnet nicht NA-Werte handhaben!

+0

Dies ist auch der Fehler, den ich habe. Wie hast du das Problem gelöst? – user2806363

+1

Einige verschiedene Lösungen existieren: 1) Der Ansatz, den ich nahm, war, eine zweite Spalte col_x_is_na zu erstellen. Wo die Spalte NA ist, wird diese sekundäre Spalte auf wahr gesetzt. Nachdem Sie diese zweite Spalte erstellt haben, können Sie alle NA-Werte auf 0 setzen. Die sekundäre Flag-Spalte gleicht die Werte in der ursprünglichen Spalte ab. 2) ausschließen diese Spalten 3) die Zellen mit NA-Werte imputieren 4) ein Paket verwenden, die NA-Werte verarbeiten können, zum Beispiel ada – mgoldwasser

+16

Ich habe die gleiche Fehlermeldung ohne irgendwelche NA-Werte ... – citraL