2 向方差分析循环并导出为 CSV 或 Excel Table

2-Way Anova Loop & Export to CSV or Excel Table

我已经想出如何 运行 对我的数据框中的几个变量进行二次方差分析,但不确定如何将其转换为可以轻松导出到 csv 文件或excel。理想情况下,我希望它采用一种格式,其中我的数百个因变量中的每一个都在它自己的行中,pVaules 和 Fvalues

我已经使用 titanic 数据集做了一个例子。在这种情况下,我将 Sex & Embarked 设置为我的分类变量,并希望将 Sex Embarked 和 ~Interaction 的效果输出以某种方式保存到文件中。我愿意接受关于如何输出这个的建议——只是希望能够轻松地识别哪些值是重要的,最好是每个因变量在其自己的行上。

library(titanic)
library(tidyverse)

df1 <- 
  titanic_train %>%
  select(Sex, Embarked, (1:10)) %>%
  select(!("Name" | "Ticket")) %>%
  filter(Embarked != "") # deleting empty Embarked status
names(df1)

df1$Sex<- factor(df1$Sex)
df1$Embarked <-factor(df1$Embarked)

#store all formulae in a list
formulae <- lapply(colnames(df1)[3:ncol(df1)], function(x) as.formula(paste0(x, " ~ Sex * Embarked")))

#go through list and run aov()
results <- lapply(formulae, function(x) summary(aov(x, data = df1)))
names(results) <- format(formulae)
results

您可以从 summary 中提取相关统计信息或将模型存储在列表中,然后对其使用 broom::tidy 以将所有统计信息集中在一个数据框中。使用 map 函数将其 运行 列入模型列表。

library(purrr)
library(broom)

results <- lapply(formulae, function(x) aov(x, data = df1))
names(results) <- format(formulae)
data <- map_df(results, tidy, .id = 'formulae')
data

# A tibble: 28 x 7
#   formulae       term       df    sumsq  meansq statistic   p.value
#   <chr>          <chr>   <dbl>    <dbl>   <dbl>     <dbl>     <dbl>
# 1 PassengerId ~… Sex         1  1.09e+5 1.09e+5     1.65   1.99e- 1
# 2 PassengerId ~… Embark…     2  5.50e+4 2.75e+4     0.416  6.60e- 1
# 3 PassengerId ~… Sex:Em…     2  7.73e+4 3.86e+4     0.584  5.58e- 1
# 4 PassengerId ~… Residu…   883  5.84e+7 6.61e+4    NA     NA       
# 5 Survived ~ Se… Sex         1  6.16e+1 6.16e+1   376.     4.44e-70
# 6 Survived ~ Se… Embark…     2  3.32e+0 1.66e+0    10.1    4.39e- 5
# 7 Survived ~ Se… Sex:Em…     2  4.85e-1 2.43e-1     1.48   2.28e- 1
# 8 Survived ~ Se… Residu…   883  1.45e+2 1.64e-1    NA     NA       
# 9 Pclass ~ Sex … Sex         1  1.01e+1 1.01e+1    16.2    6.12e- 5
#10 Pclass ~ Sex … Embark…     2  5.83e+1 2.91e+1    46.8    4.74e-20
# … with 18 more rows

data 写入 csv。

write_csv(data, 'data.csv')