带有数字变量的`对比度<-`(`*tmp*`,value = contr.funs[1 + isOF[nn]])中的错误[重复]

Posted

技术标签:

【中文标题】带有数字变量的`对比度<-`(`*tmp*`,value = contr.funs[1 + isOF[nn]])中的错误[重复]【英文标题】:Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) with a numeric variable [duplicate] 【发布时间】:2015-06-16 03:42:10 【问题描述】:

我正在尝试使用 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】:

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

基本上,即使您的原始数据框 df 仅包含具有 >=2 水平的因子,当您在 lm() 中使用 df 时,不完整的观察值也会被删除(至少是与您感兴趣的变量有关的观察值)。因此,您需要检查的不是df,而是df[complete.cases(df),]。在该数据框中,至少一个因子变量将仅保留 1 个级别(检查 levels(droplevels(x)))。

我猜你们已经解决了它,但也许它会在未来帮助其他人!

【讨论】:

以上是关于带有数字变量的`对比度<-`(`*tmp*`,value = contr.funs[1 + isOF[nn]])中的错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

两个数字交换(不使用临时变量)

如何使用带有双指针变量的结构字段(没有支持变量)?

`contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) 中的错误:对比只能应用于具有 2 个或更多级别的因子

通过批处理脚本读取带有系统变量的文本文件?

几种常见语言的基本语法对比:数字处理

判断Javascript变量是否为空