一个常见的任务是必须对数据集的不同子集执行某种统计分析(如 anova、glm 或混合模型),并将输出表与汇总系数和 p 值组合在单个数据框中。我正在寻找一个通用函数,该函数将采用模型类型(例如aov(...)
orlm(...)
或glm(...)
or glmer(...)
)和特定输出项,根据某些分组变量,必须为每个复制分析返回系数和 p 值( s) 在一个人的数据集中。
假设我有一个数据帧,我想在其中对数据帧中不同级别的因子“复制”进行某种分析data
:
data(iris)
library(car)
data=data.frame()
for (i in 1:10) {data=rbind(data,cbind(replicate=i,iris))}
使用broom+dplyr
,我可以例如对此数据帧的每个子集进行方差分析(按复制分组)并使用“物种”一词保留 p 值
library(devtools)
install_github("dgrtwo/broom")
library(broom)
library(dplyr)
group_by(data, replicate) %>% do(tidy(Anova(aov(Sepal.Length ~ Species, data = .),type="III"))) %>% filter(term=="Species")
Source: local data frame [10 x 6]
Groups: replicate [10]
replicate term sumsq df statistic p.value
(int) (chr) (dbl) (dbl) (dbl) (dbl)
1 1 Species 189.6364 2 362.6614 2.580311e-94
2 2 Species 189.6364 2 362.6614 2.580311e-94
3 3 Species 189.6364 2 362.6614 2.580311e-94
4 4 Species 189.6364 2 362.6614 2.580311e-94
5 5 Species 189.6364 2 362.6614 2.580311e-94
6 6 Species 189.6364 2 362.6614 2.580311e-94
7 7 Species 189.6364 2 362.6614 2.580311e-94
8 8 Species 189.6364 2 362.6614 2.580311e-94
9 9 Species 189.6364 2 362.6614 2.580311e-94
10 10 Species 189.6364 2 362.6614 2.580311e-94
(我在这里使用了 10 个相同的数据子集作为示例)
我正在寻找一个更通用的函数“ Anovabygroup
”,它将采用数据框、分组变量(这里replicate
,但它也可以是几个分组变量的组合)、要运行的模型类型(例如在这个case 'aov(Sepal.Length ~ Species, data = .)'
,但它也可以是 lm、glm、lme、lmer 或 glmer 模型或由Anova()
) 以及返回系数和 p 值的因子(可能使用选项“all”返回所有内容)作为参数(给定的任何其他选项都可以传递给对 Anova 的调用)。任何人都知道如何使用与上面使用的代码类似的代码来执行此操作,但可以概括为采用这些参数?我不知道该怎么做的主要事情是将模型(例如在这种情况下为'aov(Sepal.Length ~ Species,data = .)')作为参数传递并对其进行评估。或者它可能已经存在于某个包中?我认为这可能很有用,因为我总是发现自己一遍又一遍地编写这个任务......
PS 我使用了 github 版本的 broom 包,因为当前的 CRAN 版本似乎不能很好地处理 Anova 输出