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')
我已经想出如何 运行 对我的数据框中的几个变量进行二次方差分析,但不确定如何将其转换为可以轻松导出到 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')