na.fail.default出错:对象中缺少值 - 但没有缺失值

Inv*_*niE 15 r error-code missing-data nlme

我正在尝试使用这些数据运行lme模型:

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))
Run Code Online (Sandbox Code Playgroud)

我收到此错误代码:

na.fail.default出错(列表(cor_partner = c)(1L,1L,2L,1L,1L,1L,:对象中缺少值)

我知道论坛中有类似的问题.但是,在我的情况下:

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

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

Ben*_*ker 23

tl; dr你必须同时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) ...
Run Code Online (Sandbox Code Playgroud)

现在尝试:

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)
Run Code Online (Sandbox Code Playgroud)

我们收到了收敛错误和警告,但我认为现在是因为我们使用的是一个没有足够信息的微小数据集,而不是因为代码存在任何固有问题.

  • 谢谢,它的工作原理对实际数据没有任何警告。我以为na.exclude(day)会根据“ day”中的值自动排除整个行,而不适用于单列值,所以很高兴知道! (2认同)

小智 6

randomForest包具有na.roughfix" 按中位数/模式计算缺失值 "的功能

您可以按如下方式使用它

fit_rf<-randomForest(store~.,
        data=store_train,
        importance=TRUE,
        prOximity=TRUE,
        na.action=na.roughfix)
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您的数据包含 Na 或缺失值,您可以使用它,它将传递与数据集中完全相同的数据。

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

  • 这与@kurapati 的答案有何不同? (6认同)