2011-12-03 19 views
61

Vorrei montare un modello di foresta casuale, ma quando chiamoCome costruire foreste casuali in R con valori mancanti (NA)?

library(randomForest) 
cars$speed[1] <- NA # to simulate missing value 
model <- randomForest(speed ~., data=cars) 

ottengo il seguente errore

Error in na.fail.default(list(speed = c(NA, 4, 7, 7, 8, 9, 10, 10, 10, : 
    missing values in object 
+0

Nel suo stato attuale, questa domanda sarà molto difficile da rispondere. Puoi aggiornare la tua domanda con alcuni dati di esempio? – Chase

+1

@ MattO'Brien Divertente anche il fatto che la qualità di una domanda sia discussa in base al viewcount e non nel merito della domanda stessa. E la risposta, dal momento che @ Joran non ha avuto problemi a capire cosa viene chiesto e fornito quella che sembra essere una buona soluzione per il problema del richiedente. – user7610

risposta

101

La mia reazione iniziale a questa domanda è che non ha mostrato molta ricerca sforzo, poiché "tutti" sanno che le foreste casuali non gestiscono i valori mancanti nei predittori. Ma dopo aver controllato ?randomForest devo confessare che potrebbe essere molto più esplicito a riguardo.

(Anche se, Breiman di PDF legato alla nella documentazione dice esplicitamente che i valori mancanti sono semplicemente non trattati affatto.)

L'unico indizio evidente nella documentazione ufficiale che ho potuto vedere è che il valore predefinito per il parametro na.action è na.fail, che potrebbe essere troppo criptico per i nuovi utenti.

In ogni caso, se i predittori hanno valori mancanti, si ha (praticamente) due scelte:

  1. utilizzare uno strumento diverso (rpart maniglie mancante valori ben.)
  2. imputare i valori mancanti

Non sorprende che il pacchetto randomForest abbia una funzione per fare proprio questo, rfImpute. La documentazione su ?rfImpute passa attraverso un esempio di base del suo utilizzo.

Se solo un numero ridotto di casi presenta valori mancanti, è possibile provare a impostare na.action = na.omit in modo da eliminare tali casi.

E naturalmente questa risposta è un po 'un'ipotesi che il tuo problema è semplicemente avere dei valori mancanti.

+0

ti capita di sapere cosa 'WIN ~ .' nel primo argomento sull'OP significa?Questo non è certamente il posto migliore per porre la domanda, ma chiedevo se lo sapessi. Grazie. –

+4

@ user273158 Questa è la formula del modello, come documentato in '? RandomForest' con l'argomento' formula'. Indica a R di usare 'WIN' come variabile di risposta, e' .' è una scorciatoia che significa "tutte le altre variabili nel frame di dati". Quindi sta dicendo a R di usare 'WIN' come variabile di risposta e tutte le altre variabili disponibili sono predittive. Vedi '? Formula' per maggiori dettagli. – joran

3

Se non v'è possibilità che i valori mancanti sono informativi allora si può Inpute valori mancanti e aggiungere le variabili binarie addizionali (con new.vars<-is.na(your_dataset)) e verificare se si abbassa l'errore, se new.var è troppo grande set per aggiungerlo alla your_dataset allora si potrebbe utilizzare da soli, scegliere le variabili significiant con varImpPlot e aggiungerli alla your_dataset, si potrebbe anche provare ad aggiungere singola variabile a your_dataset che conta il numero di NA s' new.var <- rowSums(new.vars)

Questo non è off-cometopick rispondere, se le variabili mancanti sono contabilità informativo perché potrebbero correggere l'aumento dell'errore del modello dovuto alla sola procedura di imputazione perfetta.

I valori mancanti sono informativi quindi sorgono a causa di cause non casuali, particolarmente comuni nelle impostazioni degli esperimenti sociali.