2015-04-19 10 views
11

Pracuję nad regularnym data.frame, który wygląda na duży dla funkcji glm, więc zdecydowałem, że będę pracował nad rzadką represantacją matrycy modelu, więc mogę umieścić to rzadkie macierz do funkcji glmnet. Ale sparse.model.matrix wygląda jak upuścić niektóre wiersze z oryginalnej macierzy. Jakiś pomysł, dlaczego tak się dzieje, i jakiekolwiek rozwiązanie, jak tego uniknąć? Kod poniżej:sparse.model.matrix traci wiersze w R

> mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1, 
data = daneOst) 
> dim(mm) 
[1] 1253223  292 
> dim(daneOst) 
[1] 1258836  6 

Odpowiedz

10

Miałem pewne sukcesy z zmieniając na.action do na.pass ta obejmuje wszystkie wiersze w moim matrix:

options(na.action='na.pass') 

Wystarczy pamiętać, że jest to opcja globalna, więc prawdopodobnie chcesz ustawić ją z powrotem do oryginalnej wartości po, aby nie zepsuć się z resztą kodu.

previous_na_action <- options('na.action') 
options(na.action='na.pass') 
# Do your stuff... 

options(na.action=previous_na_action$na.action) 

Rozwiązanie od this odpowiedź.

+0

Należy zauważyć, że używam tego dla modeli opartych na drzewach, które mogą obsługiwać wartości NA. YMMV – Bar

+0

Myślę, że to najlepsze rozwiązanie, jak dotąd. Dlatego akceptuję to jako odpowiedź. –

7

Wynika to z NA!

Uruchom sum(complete.cases(mm)). Założę się, że daje ci także 1253223.

Więc zamień NA w swojej ramce danych na wartość (np. "IMPUTED_NA" lub -99999), a następnie spróbuj ponownie.

2

@WillemM jest poprawna. Obecność NAs spowoduje wyłączenie rzadkiej macierzy. W przypadku dużych zestawów danych najlepszym sposobem jest odczytanie pliku w ramce danych za pomocą stringsAsFactors=FALSE, a następnie wybór dowolnej metody imputacji. Jeśli wybierzesz metodę uczenia opartą na drzewach, łatwiej będzie przypisać te NAs coś, czego nie ma w zbiorze danych. Wielokrotne imputacje na dużych zbiorach danych zajmą szalenie długi czas, a Ty możesz także stracić sesje R.

Powiązane problemy