Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error in na.fail.default: missing values in object - but no missing values

Tags:

I am trying to run a lme model with these data:

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

I get this error code:

Error in na.fail.default(list(cor_partner = c(1L, 1L, 2L, 1L, 1L, 1L, : missing values in object

I am aware there are similar questions in the forum. However, in my case:

  • cor_partner has no missing values;
  • the whole object is coded as a factor (at least from what the Global Environment shows).

I could exclude those NA values with an na.action, but I'd rather know why the function is reading missing values - to understand exactly what is happening to my data.

like image 902
InverniE Avatar asked Jul 07 '16 16:07

InverniE


1 Answers

tl;dr you have to use na.exclude() (or whatever) on the whole data frame at once, so that the remaining observations stay matched up across 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) ... 

Now try:

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) 

We get convergence errors and warnings, but I think that's now because we're using a tiny made-up data set without enough information in it and not because of any inherent problem with the code.

like image 103
Ben Bolker Avatar answered Nov 03 '22 22:11

Ben Bolker