Невозможно выполнить двусторонние повторные измерения ANOVA; 0 (не NA) случаев - PullRequest
3 голосов
/ 03 февраля 2020

Я пытаюсь следовать руководству Датановиа для Двусторонние повторные измерения ANOVA .

Краткий обзор моего набора данных:

Я измерил количество различных видов бактерий в 12 единицах отбора проб за определенное время. У меня 16 временных точек и 2 группы. Я организовал свои данные в виде таблицы, называемой «богатство»;

# A tibble: 190 x 4
   id    selection.group Day   value
   <fct> <fct>           <fct> <dbl>
 1 KRH1  KR              2      111.
 2 KRH2  KR              2      141.
 3 KRH3  KR              2      110.
 4 KRH1  KR              4      126 
 5 KRH2  KR              4      144 
 6 KRH3  KR              4      135.
 7 KRH1  KR              6      115.
 8 KRH2  KR              6      113.
 9 KRH3  KR              6      107.
10 KRH1  KR              8      119.

Идентификатор относится к каждой единице выборки, а группа выбора состоит из двух факторов (KR и RK).

richness <- tibble(
  id = factor(c("KRH1", "KRH3", "KRH2", "RKH2", "RKH1", "RKH3")), 
  selection.group = factor(c("KR", "KR", "KR", "RK", "RK", "RK")), 
  Day = factor(c(2,2,4,2,4,4)), 
  value = c(111, 110, 144,  92,  85,  69))  # subset of original data

Кажется, что моя таблица представлена ​​в том же формате, что и один в учебнике;

> str(selfesteem2)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   72 obs. of  4 variables:
 $ id       : Factor w/ 12 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ treatment: Factor w/ 2 levels "ctr","Diet": 1 1 1 1 1 1 1 1 1 1 ...
 $ time     : Factor w/ 3 levels "t1","t2","t3": 1 1 1 1 1 1 1 1 1 1 ...
 $ score    : num  83 97 93 92 77 72 92 92 95 92 ..

Прежде чем я смогу выполнить повторные измерения ANOVA, я должен проверить правильность своих данных. Я скопировал рамки, предложенные в учебнике.

#my code
richness %>%
  group_by(selection.group, Day) %>%
  shapiro_test(value)

#tutorial code
selfesteem2 %>%
  group_by(treatment, time) %>%
  shapiro_test(score)

Но при попытке запустить код появляется сообщение об ошибке «Ошибка: столбец variable неизвестен». кто-нибудь знает, почему это произошло?

Я попытался продолжить без гарантии того, что мои данные нормально распределены, и попытался запустить ANOVA

res.aov <- rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
  )

, но получил это сообщение об ошибке; Ошибка в lm.fit (x, y, offset = offset, singular.ok = singular.ok, ...): 0 (не для NA) случаев

Я проверил значения NA с any(is.na(richness)) который возвращает FALSE. Я также проверил table(richness$selection.group, richness$Day), чтобы убедиться, что мои настройки верны


     2 4 6 8 12 16 20 24 28 29 30 32 36 40 44 50
  KR 6 6 6 6  6  6  6  6  6  6  6  5  6  6  6  6
  RK 6 6 6 6  6  5  6  6  6  6  6  6  6  6  6  6

И настройки кажутся правильными. Буду очень признателен за советы по решению этой проблемы.

С наилучшими пожеланиями, Мадлен

Ниже приведено подмножество моего набора данных в воспроизводимом формате:

library(tidyverse)
library(rstatix)
library(tibble)

richness_subset = data.frame(
  id = c("KRH1", "KRH3", "KRH2", "RKH2", "RKH1", "RKH3"), 
  selection.group = c("KR", "KR", "KR", "RK", "RK", "RK"), 
  Day = c(2,2,4,2,4,4), 
  value = c(111, 110, 144,  92,  85,  69))

richness_subset$Day = factor(richness$Day)
richness_subset$selection.group = factor(richness$selection.group)
richness_subset$id = factor(richness$id)

richness_subset = tibble::as_tibble(richness_subset)

richness_subset %>%
  group_by(selection.group, Day) %>%
  shapiro_test(value)

# gives Error: Column `variable` is unknown
res.aov <- rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
)

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

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

Я создаю что-то вроде дизайна ваших данных:

set.seed(111)
richness = data.frame(id=rep(c("KRH1","KRH2","KRH3"),6),
selection.group=rep(c("KR","RK"),each=9),
Day=rep(c(2,4,6),each=3,times=2),value=rpois(18,100))

richness$Day = factor(richness$Day)
richness$id = factor(richness$id)

Во-первых, shapiro_test, в скрипте есть ошибка, и значение, которое вы хотите проверить, не может быть названо "value":

# gives error Error: Column `variable` is unknown
richness %>% shapiro_test(value)

#works
richness %>% mutate(X = value) %>% shapiro_test(X)
# A tibble: 1 x 3
  variable statistic     p
  <chr>        <dbl> <dbl>
1 X            0.950 0.422
1 X            0.963 0.843

Во-вторых, для ановы это работает для меня.

rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
  )

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

set.seed(111)
richness =
data.frame(id=rep(c("KRH1","KRH2","KRH3","KRH4","KRH5","KRH6"),3),
selection.group=rep(c("KR","RK"),each=9),
Day=rep(c(2,4,6),each=3,times=2),value=rpois(18,100))

richness$Day = factor(richness$Day)
richness$id = factor(richness$id)

rstatix::anova_test(
  data = richness, dv = value, wid = id,
  within = c(selection.group, Day)
  )

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

выдает точно такую ​​же ошибку. Это можно проверить с помощью:

lm(value~id+Day:selection.group,data=richness)


   Call:
lm(formula = value ~ id + Day:selection.group, data = richness)

Coefficients:
           (Intercept)                     id1                     id2  
               101.667                  -3.000                  -6.000  
                   id3                     id4                     id5  
                -6.000                   1.889                  11.556  
Day2:selection.groupKR  Day4:selection.groupKR  Day6:selection.groupKR  
                 1.667                 -12.000                   9.333  
Day2:selection.groupRK  Day4:selection.groupRK  Day6:selection.groupRK  
                -1.667                      NA                      NA 

Day4: selection.groupRK и Day6: selection.groupRK не подлежат оценке, так как они ранее охватывались линейной комбинацией факторов.

1 голос
/ 04 февраля 2020

Решение для запуска Shapiro_test, предложенное выше, сработало.

И я понял, что у меня есть линейная комбинация, запустив lm(value~id+Day:selection.group,data=richness). Однако я не понимаю, почему? Я знаю, что у меня есть данные для каждой группы (см. График). Откуда эта линейная комбинация?

Повторное измерение ANOVA кажется мне таким подходящим, поскольку я следую за единицами выборки с течением времени.

enter image description here

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