Меня интересует выполнение нескольких тестов для одной переменной со связанным фактором, который разделяет значения на несколько групп. Это связано с этот вопрос и, собственно, я хотел бы получить такое решение, но оно не совсем то же самое.
В моем случае у меня есть одна переменная и несколько групп (в конечном итоге много). Расширение на этот пример:
library(reshape)
# Create a dataset
mu=34
stdv=5
Location=rep(c("Area_A","Area_B","Area_C"),5)
distro=rnorm(length(Location),mu,stdv)
id=seq(1:length(Location))
sample_long=data.frame(id,Location,distro)
sample_long
id Location distro
1 1 Area_A 34.95737
2 2 Area_B 31.30298
3 3 Area_C 35.86569
4 4 Area_A 40.45378
5 5 Area_B 36.12060
6 6 Area_C 28.29649
7 7 Area_A 30.64495
8 8 Area_B 29.70668
9 9 Area_C 33.22874
10 10 Area_A 25.29148
11 11 Area_B 32.35511
12 12 Area_C 34.69159
13 13 Area_A 26.89791
14 14 Area_B 35.30717
15 15 Area_C 40.64628
Я хотел бы выполнить тесты «все против всех» среди областей, т. е. тест (область_A, область_B), тест (область_A, область_C) и тест (область_B, область_C) (в более общем случае все i<j
возможные тесты).
Простой способ — преобразовать данные в широкий формат:
# Reshape to wide format
sample_wide=reshape(sample_long,direction="wide",idvar="id",timevar="Location")
sample_wide
id distro.Area_A distro.Area_B distro.Area_C
1 1 34.95737 NA NA
2 2 NA 31.30298 NA
3 3 NA NA 35.86569
4 4 40.45378 NA NA
5 5 NA 36.12060 NA
6 6 NA NA 28.29649
7 7 30.64495 NA NA
8 8 NA 29.70668 NA
9 9 NA NA 33.22874
10 10 25.29148 NA NA
11 11 NA 32.35511 NA
12 12 NA NA 34.69159
13 13 26.89791 NA NA
14 14 NA 35.30717 NA
15 15 NA NA 40.64628
а затем зациклиться на столбцах «все против всех», для которых я видел несколько аппроксимации больше похожи на R, чем следующая, в которой я использую циклы for:
# Now compute the test
test.out=list()
k=0
for(i in 2:(dim(sample_wide)[2]-1)){ # All against all var groups
for(j in (i+1):dim(sample_wide)[2]){
k=k+1
test.out[[k]]=t.test(sample_wide[,i],
sample_wide[,j]) # store results in a list
}
}
Но мой вопрос не в том, какое решение является лучшим с учетом широкого формата, а в том, можно ли найти решение проблемы, работающее из исходного длинного формата, в соответствует решениям, найденным для ссылок, которые я предоставил выше, которые используют dplyr
, broom
и т. д.
gather
перевести в "длинный" формат, а затем сделатьpairwise.t.test
- person akrun   schedule 07.08.2019t.test
, вы, вероятно, захотите сделать постфактум-тест Тьюки:r TukeyHSD(aov(distro ~ Location, data=sample_long))
Тогда вам не нужно зацикливаться или что-то еще, просто вызовите функцию. - person ssayols   schedule 07.08.2019