"Contrasts apply only to factors" 错误时 运行 方差分析
"Contrasts apply only to factors" error when running 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 个参与者。在这个例子中,我试图对因变量(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
时,出现以下错误:
Error in contrasts<-
(*tmp*
, value = contrasts.arg[[nn]]) :
contrasts apply only to factors
我已经查看了 this question,但仍然无法解决我的问题。当我 运行 下面的代码时,我被告知 none 我的变量被认为是因素。我不确定为什么 "goal" 和 "behavior" 都有 3 个级别,每个级别都有变化。
factor <- sapply((df), function(x) is.factor(x))
我在这里看到的其他问题专门针对
的错误消息
contrasts apply only to factors with two or more levels
这与我收到的错误消息不同。我该怎么做才能正确地把它变成 运行?
"factor" 在 R 中具有特定含义(例如参见 [=14=]);它们不仅仅是任何变化的变量,而是经过编码的变量,以便 R 知道它应该将它们视为分类预测变量。
在你的情况下,
df <- transform(df, goal=factor(goal), behavior=factor(behavior))
应该有效(factor()
和 as.factor()
大致相同,使用您喜欢的任何一个)。来自评论 (df <- df %>% transmute_all(as.factor)
) 的建议稍微紧凑一些,但 (1) 取决于 "tidyverse" 软件包套件(您可能不喜欢)和 (2) 更改 all 数据框中的变量进行分解(同上)。
我有一个如下所示的数据框:
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
时,出现以下错误:
Error in
contrasts<-
(*tmp*
, value = contrasts.arg[[nn]]) :
contrasts apply only to factors
我已经查看了 this question,但仍然无法解决我的问题。当我 运行 下面的代码时,我被告知 none 我的变量被认为是因素。我不确定为什么 "goal" 和 "behavior" 都有 3 个级别,每个级别都有变化。
factor <- sapply((df), function(x) is.factor(x))
我在这里看到的其他问题专门针对
的错误消息contrasts apply only to factors with two or more levels
这与我收到的错误消息不同。我该怎么做才能正确地把它变成 运行?
"factor" 在 R 中具有特定含义(例如参见 [=14=]);它们不仅仅是任何变化的变量,而是经过编码的变量,以便 R 知道它应该将它们视为分类预测变量。
在你的情况下,
df <- transform(df, goal=factor(goal), behavior=factor(behavior))
应该有效(factor()
和 as.factor()
大致相同,使用您喜欢的任何一个)。来自评论 (df <- df %>% transmute_all(as.factor)
) 的建议稍微紧凑一些,但 (1) 取决于 "tidyverse" 软件包套件(您可能不喜欢)和 (2) 更改 all 数据框中的变量进行分解(同上)。