运行ANOVA时出现“对比度仅适用于因子”错误

时间:2018-12-17 19:38:13

标签: r lm anova

我有一个数据框架,如下所示:

goal  behavior  dv1  dv2  dv3
1     1         4    2    6
1     5         3    5    1
1     7         2    4    2
5     1         5    2    7
5     5         2    1    3
5     7         2    1    2
7     1         4    5    7
7     5         2    1    4
7     7         3    2    5

如您所见,有9个条件(目标3种可能性x行为3种可能性)。在实际数据集中,这9个条件中的每个条件大约都有25-30位参与者。在此示例中,我尝试对因变量(dv1dv2dv3)进行双向的运行,以查看两者之间是否存在交互作用goalbehavior

我尝试运行以下代码。 dv是仅包含列dv1dv2dv3的矩阵。 df是上面的整个数据帧。

output <- lm(as.matrix(dv) ~ goal * behavior, data = df,
         contrasts = list(goal = contr.sum, behavior = contr.sum))
summary(aov(output))

当我尝试创建对象output时,出现以下错误:

  

contrasts<-*tmp*中的错误,值=相反。arg[[nn]]):
  对比仅适用于因素

我看过this question,但仍然无法解决我的问题。当我运行以下代码时,被告知没有任何变量被视为因素。我不确定为什么这是“目标”和“行为”都具有变化的3个级别的原因。

factor <- sapply((df), function(x) is.factor(x))

我在这里查看的其他问题专门解决了错误消息

  

对比度仅适用于两个或多个水平的因子

与我收到的错误消息不同。我该怎么做才能使其正常运行?

1 个答案:

答案 0 :(得分:2)

“ factor”在R中具有特定含义(例如,参见this page from UC Berkeley);它们不仅是变化的变量,而且是经过编码的变量,以便R知道应将其视为分类预测变量。

就您而言,

df <- transform(df, goal=factor(goal), behavior=factor(behavior))

应该可以工作(factor()as.factor()大致相同,请使用您喜欢的任何一种)。评论(df <- df %>% transmute_all(as.factor))的建议稍微紧凑一些,但(1)取决于套件的“ tidyverse”套件(您可能不喜欢),以及(2)更改 all 数据框中的变量以进行(同上)分解。