Ошибка функции «anova_test» (0 (не_NA) случаев) и линейная комбинация для двусторонней повторной ановой - PullRequest
2 голосов
/ 22 апреля 2020

Я пытаюсь запустить двухстороннее повторное измерение anova в R с помощью функции anova_test в пакете rstatix. Я примерно следую учебнику, найденному здесь . Мои данные состоят из нескольких колоний муравьев («Колония»), каждая из которых разделена на 3 обработки («Размер»). Я собрал данные («g») за 8 временных точек («Время»). Я загрузил подмножество моих данных на github, но вот краткое резюме:

 # A tibble: 24 x 6
   Species Colony Fragment Size  Time      g
   <fct>   <fct>  <fct>    <fct> <fct> <dbl>
 1 obs     5      5L       L     1     0.565
 2 obs     2      2L       L     2     0.002
 3 obs     8      8L       L     3     0.699
 4 obs     12     12L      L     4     0.257
 5 obs     12     12L      L     5     0.131
 6 obs     3      3L       L     6     0.014
 7 obs     10     10L      L     7     0.15 
 8 obs     12     12L      L     8     0.054
 9 obs     10     10M      M     1     0.448
10 obs     8      8M       M     2     0.135
# ... with 14 more rows

Я попытался запустить двухстороннее повторное измерение anova тремя различными способами, с следующий код:

aov <- df %>% anova_test(g ~ Size*Time + Error(Colony/(Size*Time)))
aov <- df %>% anova_test(dv=g, wid = Colony, within= c(Size,Time))
aov <- anova_test(data = df, dv=g, wid=Colony, within=c(Size, Time))

Каждый из них выдает следующую ошибку:

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

Я пробовал один и тот же код на двух образцах наборов данных, которые отформатированы аналогично моему набору данных, и функция работает отлично (и каждый метод выдает одинаковые результаты). Вот краткое изложение примеров наборов данных для справки:

# A tibble: 6 x 4
  id    treatment time  score
  <fct> <fct>     <fct> <dbl>
1 7     ctr       t1       92
2 6     ctr       t2       65
3 12    ctr       t3       62
4 6     Diet      t1       76
5 9     Diet      t2       94
6 7     Diet      t3       87



# A tibble: 6 x 4
        len supp   dose    id
      <dbl> <fct> <dbl> <int>
    1  21.5 OJ      0.5     2
    2  14.5 OJ      1       9
    3  22.4 OJ      2       3
    4   4.2 VC      0.5     1
    5  17.3 VC      1       4
    6  29.5 VC      2      10

Я подтвердил, что мои данные не имеют никаких значений NA с any(is.na(df)), который возвращает FALSE.

Я наткнулся на аналогичный вопрос и один полезный автор предположил, что эта ошибка может быть связана с линейной комбинацией, а не со значениями NA. Я решил проверить свои данные, используя lm(g ~ Colony+Time:Size, data=df), и действительно, похоже, у меня есть линейная комбинация:

Call:
lm(formula = g ~ Colony + Time:Size, data = df)

Coefficients:
(Intercept)      Colony1      Colony2      Colony3      Colony4      Colony5  Time1:SizeL  Time2:SizeL  Time3:SizeL  
   0.044167    -0.118549    -0.108424     0.076868     0.073243     0.034368     0.213000     0.351167     0.199833  
Time4:SizeL  Time5:SizeL  Time6:SizeL  Time7:SizeL  Time8:SizeL  Time1:SizeM  Time2:SizeM  Time3:SizeM  Time4:SizeM  
   0.060667     0.071333     0.005000     0.017000    -0.029167     0.239667     0.216333     0.174667     0.050500  
Time5:SizeM  Time6:SizeM  Time7:SizeM  Time8:SizeM  Time1:SizeS  Time2:SizeS  Time3:SizeS  Time4:SizeS  Time5:SizeS  
   0.069500     0.033167     0.011500    -0.003667    -0.015500     0.081167     0.020000     0.042500     0.026333  
Time6:SizeS  Time7:SizeS  Time8:SizeS  
  -0.014333    -0.000500           NA  

Однако я не понимаю, почему. Категория Time8: SizeS по существу такая же, как и во всех других комбинациях Time: Size. Если кто-то может объяснить, почему я могу столкнуться с этой ошибкой или у меня есть решение о том, как я могу выполнить двухсторонние повторные измерения anova (с anova_test ) или без них, я был бы очень признателен !

Заранее спасибо!

1 Ответ

1 голос
/ 23 апреля 2020

Мне нужно снова прочитать код для rstatix ​​:: anova_test, но с вашим дизайном все в порядке, он сбалансирован, и в этом вся проблема - дополнительные столбцы. Я подозреваю, что где-то поворот разворачивается из-за столбцов:

library(rstatix)
library(dplyr)

df=read.csv("https://raw.githubusercontent.com/mwest9/sample_data/master/test_repeat_anova.csv")

df$Colony = factor(df$Colony)
df$Time = factor(df$Time)

df %>% select(g,Size,Time,Colony) %>%
anova_test(g ~ Size*Time + Error(Colony/(Size*Time)))

ANOVA Table (type III tests)

     Effect DFn DFd     F       p p<.05   ges
1      Size   2  10 4.098 0.05000       0.075
2      Time   7  35 5.428 0.00028     * 0.209
3 Size:Time  14  70 1.595 0.10200       0.099

Обратите внимание, что он сообщает только анову, а не другой тест на сферичность:

Тест Моучли на сферичность: если есть присутствуют переменные -Ss с более чем 2 уровнями, фрейм данных, содержащий результаты теста Моухли на сферичность. Сообщается только для эффектов, которые имеют более 2 уровней, поскольку сферичность обязательно сохраняется для эффектов только с 2 уровнями. • Сферические поправки: если присутствуют какие-либо переменные в пределах Ss, фрейм данных, содержащий эпсилон-значения Гринхауса-Гайссера и Хюйна-Фельдта и соответствующие исправленные p-значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...