`对比< -`(`* tmp *`,value = contr.funs [1 + isOF [nn]])与数字变量出错

时间:2015-04-10 12:11:58

标签: r function

我试图用Amelia包来估算大数据集。调用amelia函数时出现此错误:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
contrasts can be applied only to factors with 2 or more levels

因为我没有1级的因子变量,所以我开始删除变量变量,看看哪个变量导致了这个问题。我将其追踪到这个数值变量,当我从数据集中删除这个单个变量时,amelia起作用:

> str(train$ABC)
 num [1:1600] 5.19 5.38 5.59 5.26 5.12 ...

然而这个变量没什么奇怪的:

> summary(train$ABC)
 Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
4.533   5.166   5.328   5.434   5.557   7.914     610 

> summary(na.omit(train))

        ABC              ...
   Min.   :4.533   
   1st Qu.:5.196  
   Median :5.384   
   Mean   :5.512  
   3rd Qu.:5.668   
   Max.   :7.520

> var(train$ABC,na.rm=T)
     [1] 0.1969697

> aa <- na.omit(train)
> var(aa$ABC)
 [1] 0.2500173

对不起,我无法提供完整的数据集,因为这是我正在进行的一项医学研究,我无法弥补一个微不足道的例子。

还有什么可能导致此错误?我该在哪里开始寻找? 感谢。

1 个答案:

答案 0 :(得分:1)

我今天遇到了同样的问题,这是由于许多缺失的值。

基本上,即使原始数据框df仅包含&gt; = 2级别的因素,当您在df内使用lm()时,不完整的观察结果也会被删除(至少是关于你感兴趣的变量)。因此,df不需要检查&lt; 2级别但df[complete.cases(df),]的因子。在该数据框中,至少有一个因子变量只剩下1个级别(检查levels(droplevels(x)))。

我猜你们已经解决了这个问题,但未来可能会对其他人有所帮助!