对分组数据迭代执行方差分析(使用 ezANOVA)
Perform ANOVA (using ezANOVA) iteratively on grouped data
创建 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))
我正在尝试对样本数据的多个子集执行方差分析并提取系数 - 见上文。当我将数据集过滤成单个电极时(即 "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 中的多个 'subsets' 完成类似操作时,我只是为所有操作生成 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()
提前感谢您的帮助 - 如果我可以进一步说明,请告诉我!!
你得到错误是因为你是 运行 重复测量方差分析的测试。它有一个非常严格的设计,使用来自 this website:
的示例
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))
而且你还漏掉了between effect,上面我已经帮你补上了,根据repeated measure。现在,如果您的学习或测试不适合 repeated measure anova,那么只需将您想要测试的所有变量放在:
之间
output <-ezANOVA(dv = norm_power,between=.(phoneme, intensity), wid=.(Subject), data=droplevels(sample_data_elec1))
创建 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))
我正在尝试对样本数据的多个子集执行方差分析并提取系数 - 见上文。当我将数据集过滤成单个电极时(即 "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 中的多个 'subsets' 完成类似操作时,我只是为所有操作生成 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()
提前感谢您的帮助 - 如果我可以进一步说明,请告诉我!!
你得到错误是因为你是 运行 重复测量方差分析的测试。它有一个非常严格的设计,使用来自 this website:
的示例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))
而且你还漏掉了between effect,上面我已经帮你补上了,根据repeated measure。现在,如果您的学习或测试不适合 repeated measure anova,那么只需将您想要测试的所有变量放在:
之间output <-ezANOVA(dv = norm_power,between=.(phoneme, intensity), wid=.(Subject), data=droplevels(sample_data_elec1))