我正在尝试运行一个重复测量ANCOVA。下面的代码可以正常工作:
tidy(aov(FA ~ sex * study + Error(PartID), data = DTI.TRACTlong))
其中FA是连续测量,性别和学习是研究表明的因素(时间1或时间2),PartID是个体id。但是,我必须针对两种不同的条件(协调与不协调)对许多区域(ROI)运行此分析。使用tidyverse和group_by(见下文)似乎很容易做到这一点,但它会在Error(.$PartID)中抛出错误:could not find function "Error"。知道这里发生了什么吗?为什么单独使用Error函数时可以识别,而将tidyverse与group_by一起使用时却不能识别?
group_by(harmonize,ROI) %>%
do(tidy(aov(.$FA ~ .$GOBS_Gender * .$study + Error(.$PartID))))
指定data
并删除.$
library(broom)
library(dplyr)
...
group_by(harmonize,ROI) %>%
do(tidy(aov(FA ~ sex * study + Error(PartID), data = .)))
另一种选择可能是使用tonest_by
library(tidyr)
...
nest_by(harmonize, ROI) %>%
mutate(out = list(tidy(aov(FA ~ sex * study + Error(PartID), data = data)))) %>%
select(-data) %>%
unnest(c(out))
使用可重复的示例
> data(npk)
> npk$grp <- rep(c('a', 'b'), each = 12)
-方法
> npk %>%
group_by(grp) %>%
do(tidy(aov(yield ~ N*P*K + Error(block), data = .)))
# A tibble: 18 x 8
# Groups: grp [2]
grp stratum term df sumsq meansq statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 a block N:P:K 1 69.0 69.0 3.12 0.328
2 a block Residuals 1 22.1 22.1 NA NA
3 a Within N 1 119. 119. 6.89 0.0786
4 a Within P 1 0.270 0.270 0.0156 0.908
5 a Within K 1 58.1 58.1 3.36 0.164
6 a Within N:P 1 12.2 12.2 0.705 0.463
7 a Within N:K 1 23.4 23.4 1.35 0.329
8 a Within P:K 1 44.6 44.6 2.58 0.207
9 a Within Residuals 3 51.8 17.3 NA NA
10 b block N:P:K 1 29.3 29.3 0.431 0.630
11 b block Residuals 1 67.9 67.9 NA NA
12 b Within N 1 73.0 73.0 57.3 0.00478
13 b Within P 1 21.3 21.3 16.7 0.0264
14 b Within K 1 38.2 38.2 29.9 0.0120
15 b Within N:P 1 8.52 8.52 6.68 0.0814
16 b Within N:K 1 31.5 31.5 24.7 0.0156
17 b Within P:K 1 47.3 47.3 37.1 0.00888
18 b Within Residuals 3 3.82 1.27 NA NA
-group_modify @andrew reece
> npk %>%
group_by(grp) %>%
group_modify(~aov(yield ~ N*P*K + Error(block), data = .) %>%
tidy)
# A tibble: 18 x 8
# Groups: grp [2]
grp stratum term df sumsq meansq statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 a block N:P:K 1 69.0 69.0 3.12 0.328
2 a block Residuals 1 22.1 22.1 NA NA
3 a Within N 1 119. 119. 6.89 0.0786
4 a Within P 1 0.270 0.270 0.0156 0.908
5 a Within K 1 58.1 58.1 3.36 0.164
6 a Within N:P 1 12.2 12.2 0.705 0.463
7 a Within N:K 1 23.4 23.4 1.35 0.329
8 a Within P:K 1 44.6 44.6 2.58 0.207
9 a Within Residuals 3 51.8 17.3 NA NA
10 b block N:P:K 1 29.3 29.3 0.431 0.630
11 b block Residuals 1 67.9 67.9 NA NA
12 b Within N 1 73.0 73.0 57.3 0.00478
13 b Within P 1 21.3 21.3 16.7 0.0264
14 b Within K 1 38.2 38.2 29.9 0.0120
15 b Within N:P 1 8.52 8.52 6.68 0.0814
16 b Within N:K 1 31.5 31.5 24.7 0.0156
17 b Within P:K 1 47.3 47.3 37.1 0.00888
18 b Within Residuals 3 3.82 1.27 NA NA
-nest_by方法> npk %>%
nest_by(grp) %>%
mutate(out = list(tidy(aov(yield ~ N*P*K + Error(block),
data = data)))) %>%
select(-data) %>%
unnest(out)
# A tibble: 18 x 8
# Groups: grp [2]
grp stratum term df sumsq meansq statistic p.value
<chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 a block N:P:K 1 69.0 69.0 3.12 0.328
2 a block Residuals 1 22.1 22.1 NA NA
3 a Within N 1 119. 119. 6.89 0.0786
4 a Within P 1 0.270 0.270 0.0156 0.908
5 a Within K 1 58.1 58.1 3.36 0.164
6 a Within N:P 1 12.2 12.2 0.705 0.463
7 a Within N:K 1 23.4 23.4 1.35 0.329
8 a Within P:K 1 44.6 44.6 2.58 0.207
9 a Within Residuals 3 51.8 17.3 NA NA
10 b block N:P:K 1 29.3 29.3 0.431 0.630
11 b block Residuals 1 67.9 67.9 NA NA
12 b Within N 1 73.0 73.0 57.3 0.00478
13 b Within P 1 21.3 21.3 16.7 0.0264
14 b Within K 1 38.2 38.2 29.9 0.0120
15 b Within N:P 1 8.52 8.52 6.68 0.0814
16 b Within N:K 1 31.5 31.5 24.7 0.0156
17 b Within P:K 1 47.3 47.3 37.1 0.00888
18 b Within Residuals 3 3.82 1.27 NA NA