2016-07-07 13 views
9

Sto cercando di eseguire un modello LME con questi dati:Errore in na.fail.default: valori mancanti in oggetto - ma non valori mancanti

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)) 

ottengo questo codice di errore:

Errore in na.fail.default (lista (cor_partner = c (1L, 1L, 2L, 1L, 1L, 1L, : valori mancanti in oggetto

sono consapevole ci sono domande simili nel forum. Tuttavia, io Nel mio caso:

  • cor_partner non ha valori mancanti;
  • l'intero oggetto è codificato come un fattore (almeno da ciò che mostra l'ambiente globale).

Potrei escludere quei valori NA con un na.action, ma preferirei sapere perché la funzione sta leggendo valori mancanti - per capire esattamente cosa sta succedendo ai miei dati.

+0

Puoi includere dati e/o codice che ci forniranno un [esempio riproducibile] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? Sarà difficile rispondere diversamente a questa domanda ... –

+0

@BenBolker Modificato, grazie – InverniE

+0

questo mi sembra un errore di battitura/penso. Puoi spiegare cosa dovrebbe fare "na.exclude (day)"? Lo farei in genere aggiungendo 'day' al frame dei dati, quindi ** not ** usando' attach() ', ma utilizzando invece il data frame combinato, incluso' day'- nell'argomento 'data' ... ?? –

risposta

13

tl; dr è necessario utilizzare na.exclude() (o altro) su tutto il frame di dati in una sola volta, in modo che le osservazioni rimanenti rimangono abbinati tra le variabili ...

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) ... 

Ora provate:

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) 

otteniamo errori di convergenza e gli avvisi, ma io credo che sia ora perché stiamo usando un minuscolo dati resi-up set senza informazioni sufficienti in esso e non a causa di qualsiasi problema inerente con il codice.

+0

Grazie, funziona senza alcun avviso sui dati reali. Ho pensato che na.exclude (giorno) avrebbe automaticamente escluso l'intera riga in base al valore in "giorno", non funzionante a valore di singola colonna, quindi buono a sapersi! – InverniE

Problemi correlati