2016-07-07 180 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