2016-07-07 684 views
9

我想要运行这些数据的LME模型:错误na.fail.default:在目标缺失值 - 但没有缺失值

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

我得到这个错误代码:

错误na.fail.default(名单(cor_partner = C(1L,1L,2L,1L,1L,1L: 在对象

遗漏值我知道有在论坛类似的问题。但是,我n我的情况:

  • cor_partner没有缺失值;
  • 整个对象被编码为一个因子(至少从全球环境显示的)。

我可以使用na.action排除那些NA值,但我更想知道为什么函数正在读取缺失值 - 以便准确理解我的数据发生了什么。

+0

您可以请包括数据和/或代码,将为我们提供一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example )?这将是很难回答这个问题,否则... –

+0

@BenBolker编辑,谢谢 – InverniE

+0

这看起来像一个错字/ thinko给我。你能解释一下'na.exclude(day)'应该做什么吗?我通常会这样做,在数据框中添加'day',然后**不使用'attach()',而是使用'data'参数中的组合数据帧(包括'day'')... ?? –

回答

13

TL;博士你必须整个数据帧上使用na.exclude()(或其他)一次,使剩余的意见保持跨越变量匹配起来......

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

现在尝试:

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) 

我们得到了收敛误差和警告,但我认为现在是因为我们使用的是一个小的弥补数据集,没有足够的信息,并且不是因为代码的任何固有问题。

+0

谢谢,它对实际数据没有任何警告。我以为na.exclude(day)会根据“day”中的值自动排除整行,而不是以单列值工作,所以很高兴知道! – InverniE