Допустим, ваш фрейм данных выглядит следующим образом:
df = data.frame(id=1:100,
Group=sample(letters[1:2],100,replace=TRUE),
Gender=sample(c("M","F"),100,replace=TRUE),
matrix(rnorm(7*100),ncol=7))
colnames(df)[4:10] = paste0("Var",1:7)
contrasts(df$Group)<-contr.helmert(2)
contrasts(df$Gender)<-contr.helmert(2)
Тогда быстрый способ - сохранить результаты AOV в списке, и вы подгоните свою модель только один раз с помощью aov и снова будете использовать ее с Anova.
Variables_to_regress = colnames(df)[4:ncol(df)]
anova_results = vector("list",length(Variables_to_regress))
names(anova_results) = Variables_to_regress
for (i in Variables_to_regress) {
this_formula = as.formula(paste(i,"~ Group + Gender"))
model = aov(formula=this_formula, data=df)
anova_results[[i]] = Anova(model, data=df,type="III")
}
data.frame(anova_results[["Var1"]])
Sum.Sq Df F.value Pr..F.
(Intercept) 1.326132e-03 1 0.001214224 0.9722744
Group 2.818789e-01 1 0.258091920 0.6125874
Gender 7.351722e-01 1 0.673133183 0.4139730
Residuals 1.059400e+02 97 NA NA
write.csv(data.frame(anova_results[["Var1"]]),....)
Если вам интересно, другой способ - использовать мурлыканье и метлу для сбора всех результатов регрессии:
library(purrr)
library(broom)
library(tidyr)
res = pivot_longer(df[,-1],-c(Group,Gender)) %>%
nest(data=c(Group, Gender, value)) %>%
mutate(
fit=map(data,~aov(value ~ Group+Gender,data=.x)),
typeIII = map(fit,Anova,type="III"),
tidied = map(typeIII,tidy)
)
Приведенный выше код в основном преобразует ваши данные в длинные. format, объединяет все значения в одну переменную вместе, выполняет aov, Anova и очищает таблицу, используя tidy
из метлы. Вышеприведенное полезно для того, чтобы вы могли легко расширить это, чтобы выполнить больше тестов, или посмотреть на другие статистические данные в результате anova.
Чтобы посмотреть только результаты, выполните:
res %>% unnest(tidied) %>% select(name,term,sumsq,df,statistic,p.value)
# A tibble: 28 x 6
name term sumsq df statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 Var1 (Intercept) 0.00133 1 0.00121 0.972
2 Var1 Group 0.282 1 0.258 0.613
3 Var1 Gender 0.735 1 0.673 0.414
4 Var1 Residuals 106. 97 NA NA
5 Var2 (Intercept) 1.32 1 1.04 0.311
6 Var2 Group 0.102 1 0.0798 0.778
7 Var2 Gender 1.63 1 1.28 0.261
8 Var2 Residuals 124. 97 NA NA
9 Var3 (Intercept) 0.0625 1 0.0649 0.799
10 Var3 Group 0.247 1 0.256 0.614