对比错误

时间:2014-04-15 07:26:49

标签: r

以下是代码:

data_complete<-read.delim("D:/Work/output_java_head.txt") #complete data set #working
modelfn<-function(data_complete){
  model<-lm(mctr~price+age_group+gender+brand+product_typeid+google_product_category,data=data_complete)
  data_complete$predicted<-predict(model,data_complete) 
  return(data_complete$predicted)
  sink()
  write.csv("D:/Work/output",i,".csv")
  rm(model)
  gc(TRUE)
} #working

然后使用此命令:

by(data_complete,data_complete$google_product_category,modelfn)

我收到了这个错误:

  

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

请注意data_complete$google_product_category共有117个关卡,data_complete共有22个关卡。

我也用于测试:

by(data_complete,data_complete$google_product_category,summary)

它给了我正确的答案。

所以我猜我创建的函数modelfn存在一些问题。

1 个答案:

答案 0 :(得分:3)

我不确定你在写评论时是否相信我,但这是一个非常直接的错误,与你的一个变量只有一个观察到的水平有关。这是一个演示它的简单示例:

> x <- factor(rep(1,100), levels=1:20)
> y <- rnorm(100)
> lm(y~x)
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
  contrasts can be applied only to factors with 2 or more levels

确保您的数据实际上看起来像您认为的那样。即使变量附加了多个因子级别,变量也可能缺少多个级别的实际观察值。同样,如果您无法共享数据,我们无法真正帮助您,因此您必须自己查找发生这种情况的位置。