2015-04-19 21 views
11

Sto lavorando al normale data.frame che sembra essere troppo grande per la funzione glm quindi ho deciso che lavorerò su una rappresentazione sparsa di una matrice del modello in modo da poter mettere questo scarso matrice nella funzione glmnet. Ma sparse.model.matrix sembra cadere alcune righe dalla matrice originale. Qualche idea del perché ciò accada e di qualsiasi soluzione su come evitarlo? codice qui sotto:sparse.model.matrix perde righe in R

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

risposta

10

che ho avuto un certo successo con il cambiamento del na.action a na.pass, questo include tutte le righe nella mia matrice:

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

Basta notare che questa è un'opzione globale, quindi probabilmente si desidera impostare indietro ad esso valore originale dopo, per non scherzare con il resto del codice.

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

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

Soluzione da this risposta.

+0

Si noti che lo sto utilizzando per i modelli basati su albero che possono gestire i valori NA. YMMV – Bar

+0

Penso che questa sia la soluzione migliore, finora. Ecco perché accetto questo come risposta. –

7

E 'a causa della NA di!

Corsa sum(complete.cases(mm)). Scommetto che ti dà anche 1253223.

Quindi sostituire gli NA nel tuo dataframe con un valore (ad esempio 'IMPUTED_NA' o -99999), quindi riprovare.

2

@WillemM è corretto. La presenza di NAs interromperà la matrice sparsa. Con grandi set di dati, l'approccio migliore consiste nel leggere il file in un frame di dati con stringsAsFactors=FALSE e quindi scegliere qualsiasi metodo di imputazione desiderato. Se si sceglie di utilizzare un metodo di apprendimento basato sull'albero, è più facile imputare questi NAs con qualcosa che non è presente nel set di dati. L'imputazione multipla su big data set impiegherà moltissimo tempo e potresti anche perdere sessioni R.