«Контрасты могут применяться только к факторам с 2 или более уровнями» Несмотря на наличие нескольких уровней в каждом факторе - PullRequest
0 голосов
/ 17 января 2020

Я работаю над двухсторонним смешанным ANOVA, используя приведенные ниже данные, используя одну зависимую переменную, одну переменную между субъектами и одну переменную внутри субъектов. Когда я проверил нормальность остатков зависимой переменной, я обнаружил, что они обычно не распределены. Но на данный момент я могу выполнить двустороннюю ANOVA. Однако когда я выполняю преобразование log10 и снова запускаю сценарий, используя преобразованную переменную log, я получаю сообщение об ошибке «контрасты могут применяться только к факторам с 2 или более уровнями».

> str(m_runjumpFREQ)
'data.frame':   564 obs. of  8 variables:
 $ ID1            : int  1 2 3 4 5 6 7 8 9 10 ...
 $ ID             : chr  "ID1" "ID2" "ID3" "ID4" ...
 $ Group          : Factor w/ 2 levels "II","Non-II": 1 1 1 1 1 1 1 1 1 1 ...
 $ Pos            : Factor w/ 3 levels "center","forward",..: 2 1 2 3 2 2 1 3 2 2 ...
 $ Match_outcome  : Factor w/ 2 levels "W","L": 2 2 2 2 2 2 2 2 2 1 ...
 $ time           : Factor w/ 8 levels "runjump_nADJmin_q1",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ runjump        : num  0.0561 0.0858 0.0663 0.0425 0.0513 ...
 $ log_runjumpFREQ: num  -1.25 -1.07 -1.18 -1.37 -1.29 ...

В некоторых ответах StackOverflow на эту ошибку упоминалось, что один или несколько факторов в наборе данных, используемом для ANOVA, имеют менее двух уровней. Но, как видно выше, это не так. Другое объяснение, которое я прочитал, состоит в том, что это может быть проблема пропущенных значений, где могут быть NA. Существует:

 m1_nasum <- sum(is.na(m_runjumpFREQ$log_runjumpFREQ))
> m1_nasum
[1] 88

Однако я получаю ту же ошибку даже после удаления строк, включая NA, следующим образом.

> m_runjumpFREQ <- na.omit(m_runjumpFREQ)
> m1_nasum <- sum(is.na(m_runjumpFREQ$log_runjumpFREQ))
> m1_nasum
[1] 0

Я мог бы запустить тот же сценарий без преобразования журнала, и это работать, но с этим я получаю ту же ошибку. Факторы одинаковы в любом случае, и пропущенные значения не имеют значения. Либо я делаю решающую ошибку, либо проблема заключается в приведенной ниже строке преобразования журнала.

log_runjumpFREQ <- log10(m_runjumpFREQ$runjump)
m_runjumpFREQ <- cbind(m_runjumpFREQ, log_runjumpFREQ)

Я ценю помощь.

1 Ответ

1 голос
/ 17 января 2020

Недостаточно, чтобы факторы имели 2 уровня. Кроме того, эти уровни должны присутствовать. Например, ниже f имеет 2 уровня, но на самом деле присутствует только 1.

y <- (1:6)^2
x <- 1:6

f <- factor(rep(1, 6), levels = 1:2) 
nlevels(f)  # f has 2 levels
## [1] 2

lm(y ~ x + f)
## Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
##   contrasts can be applied only to factors with 2 or more levels
...