web-dev-qa-db-fra.com

Erreur dans na.fail.default: valeurs manquantes dans un objet - mais pas de valeurs manquantes

J'essaie de lancer un modèle lme avec ces données:

tot_nochc=runif(10,1,15)
cor_partner=factor(c(1,1,0,1,0,0,0,0,1,0))
age=runif(10,18,75)
agecu=age^3
day=factor(c(1,2,2,3,3,NA,NA,4,4,4))
dt=as.data.frame(cbind(tot_nochc,cor_partner,agecu,day))
attach(dt)

corpart.lme.1=lme(tot_nochc~cor_partner+agecu+cor_partner *agecu, 
                  random = ~cor_partner+agecu+cor_partner *agecu |day, 
                  na.exclude(day))

Je reçois ce code d'erreur:

Erreur dans na.fail.default (list (cor_partner = c (1L, 1L, 2L, 1L, 1L, 1L): valeurs manquantes dans l'objet

Je suis conscient qu'il y a des questions similaires dans le forum. Cependant, dans mon cas:

  • cor_partner n'a pas de valeurs manquantes;
  • l'objet entier est codé en tant que facteur (du moins d'après ce que montre l'environnement mondial).

Je pourrais exclure ces valeurs NA avec une action na.action, mais je préférerais savoir pourquoi la fonction lit les valeurs manquantes - pour comprendre exactement ce qui se passe dans mes données.

15
InverniE

tl; dr vous devez utiliser na.exclude() (ou autre chose) sur l'ensemble du bloc de données à la fois, afin que les observations restantes restent appariées pour toutes les variables ...

set.seed(101)
tot_nochc=runif(10,1,15)
cor_partner=factor(c(1,1,0,1,0,0,0,0,1,0))
age=runif(10,18,75)
agecu=age^3
day=factor(c(1,2,2,3,3,NA,NA,4,4,4))
## use data.frame() -- *DON'T* cbind() first
dt=data.frame(tot_nochc,cor_partner,agecu,day)
## DON'T attach(dt) ...

Essayez maintenant:

library(nlme)
corpart.lme.1=lme(tot_nochc~cor_partner+agecu+cor_partner *agecu, 
              random = ~cor_partner+agecu+cor_partner *agecu |day, 
              data=dt,
              na.action=na.exclude)

Nous avons des erreurs de convergence et des avertissements, mais je pense que cela est dû au fait que nous utilisons un ensemble de données constitué de toute petite taille, sans suffisamment d'informations, et non à cause d'un problème inhérent au code.

21
Ben Bolker

randomForest le paquet a un na.roughfix fonction qui "impute les valeurs manquantes par médiane/mode"

Vous pouvez l'utiliser comme suit

fit_rf<-randomForest(store~.,
        data=store_train,
        importance=TRUE,
        prOximity=TRUE,
        na.action=na.roughfix)
6
kurapati

si vos données contiennent des valeurs Na ou manquantes, vous pouvez utiliser cette option, les données seront transmises exactement de la même manière que dans les jeux de données.

rf<-randomForest(target~.,data=train, na.action = na.roughfix)

1
Aakash Choudhary