Сравнение двух групп с несколькими переменными с использованием anova или другого метода тестирования в r - PullRequest
1 голос
/ 18 марта 2020

Работаю над магистерской диссертацией прямо сейчас. У меня есть 2 группы: обычный душ и группа холодного душа. Переменные: возраст, пол, вес, психологическое благополучие, физиологическое благополучие, качество сна, подвижность, текстура кожи, поведение в душе и т. Д. c.

Голова (данные1)

Code Gruppe StudentBasel Alter Grösse Gewicht0W Gewicht12W 1 TURN12 2 Ja 50 159 70 72 2 AMMN17 1 Nein 26 164 52 50 3 LKPG08 2 Nein 19 167 54 NA 4 LJRn05 2 Nein 22 180 60 NA 5 AGBD08 1 Nein 24 165 49 NA 6 IUGH20 2 Nein 32 168 54 NA Geschlecht WHO1W WHO4W WHO8W WHO12W FEW1W FEW4W FEW8W FEW12W 1 w 6 21 24 25 87 70 80 75 2 w 24 22 25 22 77 78 83 74 3 w 16 NA NA NA 65 NA NA NA 4 w 19 NA NA NA 61 NA NA NA 5 w 23 18 22 NA 61 61 56 NA 6 w 22 NA NA NA 66 NA NA NA SchlafA1W SchlafA4W SchlafA8W SchlafA12W SchlafWT1W SchlafWT4W 1 32 25 25 30 49 32 2 35 31 35 28 46 43 3 28 NA NA NA 31 NA 4 23 NA NA NA 32 NA 5 27 28 26 NA 35 34 6 27 NA NA NA 41 NA

Итак. У меня есть две группы и данные с 4-й, 8-й и 12-й недели. Я хочу сравнить группы по средствам на 4-й неделе. Запуск t-тестов для каждой переменной не предлагался из-за какой-то ошибки, которую я не рассматриваю. Поэтому я подумал, что буду использовать ANOVA, как это

CSSAUW4 <- aov(formula = Gruppe ~ WHO4W + FEW4W + Dauer4W + SchlafA4W + SchlafWT4W + Einschlafzeit4W + Schwitzen + Haut4W + KHaut4W + Abwesenheit4W + Krankheitssymptome4W + Duschhäufigkeit4W, data = Group4W)

Так что я получил все свои результаты и был очень счастлив, но я не смог провести TukeyHSD () Тест, причина "Группа" не был фактором. Поэтому изменил его на множитель с помощью as.factor (), но теперь я больше не могу рассчитывать свой ANOVA. Очевидно, я все сделал неправильно и должен был использовать aov (цифра c переменная ~ группа), чтобы сравнить все, но затем я получил ту же проблему, что и в варианте с t-тестом, чтобы написать каждый код для каждой отдельной переменной.

Итак, я прочитал кое-что о ANOVA lme4, но мне очень трудно понять, как его кодировать для моих данных, поскольку я успешно уклонялся от каждого курса R в моем университете. Я хотел бы иметь несколько простых кодов, таких как: Test (группа ~ переменная1, переменная2, переменная3, данные = данные1) и все. Для Week4, Week8, Week12.

Я думал об использовании lm (group ~ variable1, variable2, et c.) Вместо этого. Будет ли это возможно и имеет смысл для моих данных? Я сомневаюсь, что мои статистические данные верны в этом: D

Второй вопрос: у меня проблема с небольшим набором данных (потеря для наблюдения за 12-й неделей составляет 90%). Так что на данный момент я получил только 8 участников в каждой группе. Могу ли я сделать такое же среднее сравнение на 12-й неделе, как и на 4-й неделе (с 25 участниками каждый)?

Помощь будет очень признательна !!

Привет, Кристиан

1 Ответ

1 голос
/ 18 марта 2020

Пример данных:

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
...