运行ANOVA时,“对比仅适用于因素”错误

问题描述 投票:0回答:1

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

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个条件(目标x 3种可能性的3种可能性)。在实际数据集中,9个条件中的每一个都有大约25-30个参与者。我试图在这个例子中对因变量(dv1dv2)运行双向dv3,看看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*,value = contrasts.arg [[nn]]): 对比仅适用于因素

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

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

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

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

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

r lm anova
1个回答
2
投票

“因子”在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)将数据框内的所有变量更改为因子(同上)。

© www.soinside.com 2019 - 2024. All rights reserved.