Я пытаюсь запустить двухстороннее повторное измерение 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 ) или без них, я был бы очень признателен !
Заранее спасибо!