Выполните ANOVA (используя ezANOVA) итеративно на сгруппированных данных - PullRequest
1 голос
/ 04 марта 2020

Создать sample_data:

norm_power <- rnorm(2298) 
phoneme <- c("t", "v", "s", "p")
intensity <- c("loud", "soft")
unique_ID <- as.factor(rep(c("elec1", "elec2", "elec3", "elec4", "elec5", "elec6", "elec7",
                   "elec8", "elec9", "elec10"), length.out = 2298))

Subject <- as.factor(rep(c("DBS1", "DBS2", "DBS3", "DBS4"), length.out = 2298))    
sample_data <- data.frame(norm_power, unique_ID, Subject, stringsAsFactors = FALSE)    
sample_data$intensity[sample(1:nrow(sample_data), nrow(sample_data), FALSE)] <- rep(intensity, c(1149,1149))    
sample_data$phoneme[sample(1:nrow(sample_data), nrow(sample_data), FALSE)] <- rep(phoneme, c(574, 574, 575, 575))

Я пытаюсь выполнить ANOVA и извлечь коэффициенты для нескольких подмножеств моих данных выборки - см. Выше. Когда я фильтрую набор данных по отдельным электродам (например, «elec1»), я могу получить результат (см. Вывод):

sample_data_elec1 <- filter(sample_data, unique_ID == "elec1")

output <-ezANOVA(dv = norm_power, within=.(phoneme, intensity), wid=Subject, data=sample_data_elec1)

Однако, когда я пытаюсь выполнить аналогичную операцию для нескольких подмножеств 'sample_data за раз, я просто создаю NA для всех операций. См. «Anova_data» ниже:

get_coefs <-function(d){

  output <-ezANOVA(dv = norm_power, within=.(phoneme, intensity), wid=Subject, data=d)

  tibble('phoneme_F' = output[["ANOVA"]][[4]][1], "phoneme_pval" = output[["ANOVA"]][[5]][1], 
         "intensity_F" = output[["ANOVA"]][[4]][2], "intensity_pval" = output[["ANOVA"]][[5]][2], 
         "interact_F" = output[["ANOVA"]][[4]][3], "interact_pval"= output[["ANOVA"]][[5]][3])
}

anova_data <- sample_data %>% 
  group_by(unique_ID) %>% 
  do({get_coefs(.)}) %>% 
  ungroup()

Заранее благодарим вас за вашу помощь - пожалуйста, дайте мне знать, если я могу уточнить еще !!

1 Ответ

0 голосов
/ 05 марта 2020

Вы получаете ошибку, потому что вы запускаете тест для многократного измерения anova. Он имеет очень строгий дизайн, используя пример с этого сайта :

library(ez)
bilingual=read.delim("http://coltekin.net/cagri/R/data/bilingual.txt")
# this works
ezANOVA(data=bilingual,dv=mlu,wid=.(subj),
within=.(language, age), between=gender)

И вы можете видеть, что для каждого предмета у вас есть ровно 1 измерение до / после или комбинация каждого Фактор существенно.

table(bilingual$age,bilingual$language,bilingual$subj)

, ,  = 1


              home.only school
  firstgrade          1      1
  preschool           1      1
  secondgrade         1      1

, ,  = 2


              home.only school
  firstgrade          1      1
  preschool           1      1
  secondgrade         1      1

Возвращаясь к вашему примеру, вам нужно использовать within_full, так как у вас есть более одного измерения, некоторые из ваших примеров набора данных будут работать, но вы можете видеть, что есть несколько жалоб, и это правильно, потому что дизайн не предназначен для этого теста:

output <-ezANOVA(dv = norm_power,between=.(phoneme, intensity), within_full=.(phoneme, intensity), wid=.(Subject), data=droplevels(sample_data_elec1))

И вы также упускаете промежуточный эффект, который я заполнил для вас выше, в соответствии с повторной мерой. Теперь, если ваше исследование или тест не предназначены для повторного измерения anova , просто поместите все переменные, под которыми вы хотите проверить, между:

output <-ezANOVA(dv = norm_power,between=.(phoneme, intensity), wid=.(Subject), data=droplevels(sample_data_elec1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...