【问题标题】:"Contrasts apply only to factors" error when running ANOVA运行 ANOVA 时出现“对比仅适用于因子”错误
【发布时间】:2019-05-18 05:12:12
【问题描述】:

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

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&lt;-(*tmp*, value = contrasts.arg[[nn]]) 中的错误:
对比仅适用于因子

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

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

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

的错误消息

对比仅适用于具有两个或更多水平的因素

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

【问题讨论】:

  • 您的玩具示例对我来说效果很好:df &lt;- df %&gt;% transmute_all(as.factor)

标签: anova r lm anova


【解决方案1】:

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

在你的情况下,

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

应该可以工作(factor()as.factor() 大致相同,使用您喜欢的任何一个)。 cmets (df &lt;- df %&gt;% transmute_all(as.factor)) 的建议更紧凑一些,但 (1) 取决于“tidyverse”软件包套件(您可能不喜欢)和 (2) 更改 all 变量要考虑的数据框(同上)。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    相关资源
    最近更新 更多