R语言 na.fail.default中的错误:对象中缺少值-但没有缺少值

nuypyhwy  于 2023-04-18  发布在  其他
关注(0)|答案(4)|浏览(336)

我正尝试用这些数据运行一个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))

我得到这个错误代码:
未通过默认值(列表(或合作伙伴= c(1 L,1 L,2L,1 L,1 L,1 L,:对象中缺少值
我知道在论坛上也有类似的问题。但是,在我的情况下:

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

我可以用na.action排除那些NA值,但我更想知道函数为什么阅读缺失值--以确切地理解数据发生了什么。

fsi0uk1n

fsi0uk1n1#

tl;dr你必须一次在整个 Dataframe 上使用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)

我们得到收敛错误和警告,但我认为这是因为我们使用了一个很小的虚构数据集,其中没有足够的信息,而不是因为代码的任何固有问题。

3mpgtkmj

3mpgtkmj2#

randomForest软件包具有na.roughfix函数,该函数“* 通过中位数/众数估算缺失值 *”
您可以按如下方式使用它

fit_rf<-randomForest(store~.,
        data=store_train,
        importance=TRUE,
        prOximity=TRUE,
        na.action=na.roughfix)
ee7vknir

ee7vknir3#

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

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

bejyjqdl4#

另一种可能的解决方案是使用data <- na.omit(train),这将允许您轻松地传递数据。

相关问题