【问题标题】:Model.matrix contrast errorModel.matrix对比错误
【发布时间】:2016-09-15 16:58:07
【问题描述】:

我有一个动态字符串来创建model.matrix。字符串值如下:

total_matrix_str
[1] "model.matrix( ~ date + MDSE_ITEM_I + COLR_N + SLS_TYPE_GRP_C + dayofwk +
 MDSE_ITEM_REF_I + WK_END_D + GREG_D + SIZE_N + MDSE_STYL_N + COLR_FMLY_N + LATTD_I 
+ LNGTD_I + weekend + dsp + assort_size + colr_per + pctTillDate + weeknr + MEANTEMPM 
+ MEANVISM + MEANWINDSPDM + MAXHUMIDITY + MINHUMIDITY + MEANDEWPTM + MEANPRESSUREM 
+ FOG + RAIN + THUNDER ,data =  total ,
contrasts.arg =list( MDSE_ITEM_I=contrasts(total$MDSE_ITEM_I,contrasts = F) , 
CO_LOC_I=contrasts(total$CO_LOC_I,contrasts = F) ,
COLR_N=contrasts(total$COLR_N,contrasts = F) ,
dayofwk=contrasts(total$dayofwk,contrasts = F) ,
SIZE_N=contrasts(total$SIZE_N,contrasts = F) ,
MDSE_STYL_N=contrasts(total$MDSE_STYL_N,contrasts = F) ,
COLR_FMLY_N=contrasts(total$COLR_FMLY_N,contrasts = F) ,
assort_size=contrasts(total$assort_size,contrasts = F) ,
weeknr=contrasts(total$weeknr,contrasts = F) ))"

以下是分类变量的不同值计数:

> length(unique(total$MDSE_ITEM_I))
[1] 30
> length(unique(total$CO_LOC_I))
[1] 5
> length(unique(total$COLR_N))
[1] 6
> length(unique(total$dayofwk))
[1] 7
> length(unique(total$SIZE_N))
[1] 9
> length(unique(total$MDSE_STYL_N))
[1] 6
> length(unique(total$COLR_FMLY_N))
[1] 4
> length(unique(total$assort_size))
[1] 7
> length(unique(total$weeknr))
[1] 7

这个命令还是会报错如下:

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

任何线索为什么我可能会收到此错误?如何通过自动检测这种情况来动态解决错误?

【问题讨论】:

  • 检查数据中的NA 值...
  • 还可能会检查以确保您认为不是因素的变量之一实际上是因素(该公式中有很多变量没有似乎检查)。
  • @joran 检查从对比中丢失的分类只有一两个级别,所以不应该去。然而,一种像差是变量SLS_TYPE_GRP_C,它具有唯一的 STRING 值。会不会惹麻烦?
  • @abhiieor 抱歉,我很难理解您在最后一条评论中所说的内容。如果SLS_TYPE_GRP_C 不是整数或数字,并且只有一个唯一值,那么是的,这可能会导致问题。
  • 所有非整数/数字变量都会有对比,无论是默认对比还是您指定的对比。您的 contrasts.arg 会覆盖您指定的某些变量的默认对比 - 任何其他分类变量都将获得默认对比。

标签: r categorical-data


【解决方案1】:

这个问题的出现是因为一个字符串变量的唯一值。用 Gregor 的话来说,“所有非整数/数值变量都会有对比,无论是默认对比还是您指定的对比。您的 contrasts.arg 会覆盖您指定的某些变量的默认对比 - 任何其他分类变量都将获得默认对比”。所以基本上所有的因子和字符串变量都会不可避免地得到对比,如果任何因子或字符串变量只有一个唯一值(即使对比没有明确定义),这将失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2019-10-15
    • 2014-05-29
    • 1970-01-01
    相关资源
    最近更新 更多