我有一个数据框架,如下所示:
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位参与者。在此示例中,我尝试对因变量(dv1
,dv2
和dv3
)进行双向anova的运行,以查看两者之间是否存在交互作用goal
和behavior
。
我尝试运行以下代码。 dv
是仅包含列dv1
,dv2
,dv3
的矩阵。 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))
我在这里查看的其他问题专门解决了错误消息
对比度仅适用于两个或多个水平的因子
与我收到的错误消息不同。我该怎么做才能使其正常运行?
答案 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 数据框中的变量以进行(同上)分解。