Пример данных:
set.seed(100)
data1 = data.frame(
Code =sample(letters,100,replace=TRUE),
Gruppe=sample(1:2,100,replace=TRUE),
matrix(rpois(100*11,100),nrow=100))
colnames(data1)[-c(1:2)] = c("StudentBasel","Alter","Grösse",
"WHO1W","WHO4W","WHO8W","WHO12W","FEW1W","FEW4W","FEW8W","FEW12W")
Вы можете выбрать столбцы, которые хотите проверить:
test_columns = c("WHO4W","WHO8W","WHO12W")
Итак, если вы просто хотите проверить, скажем, 4,8 и 12 вместе, для серии WHO4 вы выбираете команду select, которая, по сути, выбирает столбцы, которые вы хотите проверить:
library(tidyr)
library(dplyr)
library(broom)
data1 %>%
select(c("Gruppe",test_columns)) %>%
pivot_longer(-Gruppe)
# A tibble: 300 x 3
Gruppe name value
<int> <chr> <int>
1 2 WHO4W 97
2 2 WHO8W 91
3 2 WHO12W 93
4 1 WHO4W 99
5 1 WHO8W 103
6 1 WHO12W 92
7 2 WHO4W 91
8 2 WHO8W 111
9 2 WHO12W 120
10 1 WHO4W 119
# … with 290 more rows
На предыдущем шаге я в основном повторял для join каждую неделю с соответствующей Gruppe, это называется pivoting a Таблица в длинном формате.
Итак, что вы хотите сделать, это тест для Gruppe, внутри каждой переменной, и вы можете сделать это, сгруппировав сначала (group_by), а затем aov, как вы это делаете, содержащиеся в «do», что означает do aov для каждой группы:
result = data1 %>%
select(c("Gruppe",test_columns)) %>%
pivot_longer(-Gruppe) %>%
group_by(name) %>%
do(tidy(aov(value ~ Gruppe,data=.)))
# A tibble: 6 x 7
# Groups: name [3]
name term df sumsq meansq statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 WHO12W Gruppe 1 131. 131. 1.25 0.266
2 WHO12W Residuals 98 10247. 105. NA NA
3 WHO4W Gruppe 1 111. 111. 1.01 0.316
4 WHO4W Residuals 98 10740. 110. NA NA
5 WHO8W Gruppe 1 1.63 1.63 0.0169 0.897
6 WHO8W Residuals 98 9428. 96.2 NA NA
Теперь мы просто выберем термины, содержащие Gruppe, нас не интересуют остатки:
result %>% filter(term=="Gruppe")
# A tibble: 3 x 7
# Groups: name [3]
name term df sumsq meansq statistic p.value
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 WHO12W Gruppe 1 131. 131. 1.25 0.266
2 WHO4W Gruppe 1 111. 111. 1.01 0.316
3 WHO8W Gruppe 1 1.63 1.63 0.0169 0.897
Я предлагаю это выше, потому что людям легче объяснить, что вы сделали (вы не можете сказать, что я делала анову ...), и легче интерпретировать. Вы можете использовать большой aov и сделать postho c, но, пожалуйста, прочитайте и поймите, что делает anova, прежде чем применять это:
#pivot long like before
aov_df = data1 %>%
select(c("Gruppe",test_columns)) %>%
pivot_longer(-Gruppe)
# now we have a sub group for every measurement, eg. group 1 + wk4, group #2 + wk4 and so on
aov_df$subgroup = paste0(aov_df$name,aov_df$Gruppe)
result = TukeyHSD(aov(value ~ subgroup,data=aov_df))
# the below are the meaningful comparisons you need:
result$subgroup[c("WHO12W2-WHO12W1","WHO4W2-WHO4W1","WHO8W2-WHO8W1"),]
diff lwr upr p adj
WHO12W2-WHO12W1 2.2938808 -3.560239 8.148000 0.8711455
WHO4W2-WHO4W1 2.1151369 -3.738983 7.969256 0.9052955
WHO8W2-WHO8W1 -0.2560386 -6.110158 5.598081 0.9999956