У меня есть две группы лечения в моем наборе данных, и я ищу быстрый метод для расчета попарных различий между наблюдениями в первой группе и второй группе.
Как я могу быстро создать все комбинации наблюдений и определить их разницу?
Я думаю, что смогу получить комбинации идентификаторов субъектов, используя такой файл expand.grid, как ...
expand.grid(df$subjectID[df$treatment == 'Active'],
df$subjectID[df$treatment == 'Placebo'])
и затем я могу объединить значения результатов на основе идентификатора субъекта и определить их разницу. Я хотел бы более обобщенный подход, хотя, если он доступен.
Я в основном пытаюсь вычислить статистику Манна-Уитни U c с нуля, поэтому мне нужно определить, является ли значение результата в активном группа лечения больше, чем значение результата в группе плацебо (Y_a - Y_p> 0). Другими словами, мне нужно сравнить каждый ответ в группе активного лечения с каждым ответом в группе лечения плацебо.
Итак, если у меня есть некоторые данные, которые выглядят следующим образом ...
Subject Treatment Outcome
1 Active 5
2 Active 7
3 Active 6
4 Placebo 2
5 Placebo 1
Я хочу вычислить матрицу разностей ...
S4 S5
S1 5-2 5-1
S2 7-2 7-1
S3 6-2 6-1
Вот некоторые реальные данные:
structure(list(subjectID = c(342L, 833L, 347L, 137L, 111L, 1477L
), treatment = c("CC + TV", "CC + TV", "CC + TV", "Control",
"Control", "Control"), score_ch = c(2L, 3L, 2L, 3L, 0L, 0L)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
Я получил результаты, которые хотел получить:
diff_df <- expand.grid('T_ID' = df$subjectID[df$treatment == 'CC + TV'],
'C_ID' = df$subjectID[df$treatment == 'Control'])
tttt <- diff_df %>%
left_join(df %>% select(subjectID, score_ch), by = c('T_ID' = 'subjectID')) %>%
left_join(df %>% select(subjectID, score_ch), by = c('C_ID' = 'subjectID')) %>%
mutate(val = case_when(score_ch.x == score_ch.y ~ 0.5,
score_ch.x > score_ch.y ~ 1,
score_ch.x < score_ch.y ~ 0))
Но такого рода .. отстой ..