我有一个数据框架,如下所示:
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个条件(目标x3为行为的可能性)。在实际数据集中,9个条件中的每一个条件都有大约25-30个参与者。在这个示例中,我试图对因变量(dv1、dv2和dv3)运行双向的goal,以查看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*,value = contrasts.arg[nn]): 对比只适用于因素
我看过这个问题,但仍然无法解决我的问题。当我运行下面的代码时,我被告知我的变量中没有一个被认为是因素。我不知道为什么这是当“目标”和“行为”都有三个层次的变化。
factor <- sapply((df), function(x) is.factor(x))我在这里看到的其他问题都是针对
对比只适用于两个或两个以上水平的因素。
这与我收到的错误消息不同。我该怎么做才能让它正常运行?
发布于 2018-12-17 22:52:07
“因子”在R中有一个特定的含义(例如,参见这一页来自加州大学伯克利分校);它们不仅是任何变化的变量,而且是编码的变量,以便R知道它应该把它们作为绝对预测器来处理。
在你的情况下
df <- transform(df, goal=factor(goal), behavior=factor(behavior))如果工作正常(factor()和as.factor()大致相同,请使用任何您喜欢的)。注释(df <- df %>% transmute_all(as.factor))的建议稍微紧凑一些,但(1)取决于包的"tidyverse“套件(您可能不喜欢),(2)将数据帧中的所有变量更改为因式(同上)。
https://stackoverflow.com/questions/53821946
复制相似问题