Ошибка «Контрасты относятся только к факторам» при запуске ANOVA - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть фрейм данных, который выглядит следующим образом:

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 возможности для поведения).В фактическом наборе данных есть приблизительно 25-30 участников для каждого из 9 условий.Я пытаюсь запустить двусторонние в зависимых переменных (dv1, dv2 и dv3) в этом примере, чтобы увидеть, есть ли взаимодействие между 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]]):
контрасты применяются только к факторам

Я рассмотрел этот вопрос , но все еще не могу решить мою проблему.Когда я запускаю следующий код, мне говорят, что ни одна из моих переменных не считается фактором.Я не уверен, почему это так, когда и «цель», и «поведение» имеют 3 уровня с вариациями.

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

Другие вопросы, которые я здесь рассмотрел, касаются сообщения об ошибке

контрасты применяются только к факторам с двумя или более уровнями

, что отличается от сообщения об ошибке, которое я получил.Что я могу сделать, чтобы заставить это работать должным образом?

1 Ответ

0 голосов
/ 18 декабря 2018

«коэффициент» имеет конкретное значение в R (например, см. на этой странице из Калифорнийского университета в Беркли );это не просто переменная, а переменные, которые закодированы так, чтобы R знал, что он должен обрабатывать их как категориальные предикторы.

В вашем случае

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

должно работать (factor() и as.factor() примерно одинаковы, используйте любой, который вы предпочитаете).Предложение из комментариев (df <- df %>% transmute_all(as.factor)) немного более компактно, но (1) зависит от "tidyverse" набора пакетов (который вы можете не предпочесть) и (2) изменяет все переменные в пределахкадр данных в фактор (то же самое).

...