Я работаю с набором данных, который был плохо отформатирован, и я пытаюсь перевести его в аккуратный формат для статистического тестирования и визуализации данных. Я надеюсь, что кто-нибудь сможет дать мне представление о том, есть ли у меня данные в правильном формате и какой самый простой способ выполнить несколько t.tests.
Вот некоторые примеры данных, похожих на мой неисследованный формат:
library(tidyverse)
data <- data.frame("subject_id" = 1:10, "age" = 21:30, "weight" = 150:159, "height" = 65:74,
"x_c1_avg" = c(1:9, NA), "y_c1_avg" = runif(10),"z_c1_avg" = c(9:1, NA),
"x_c2e1_avg" = c(1:9, NA), "y_c2e1_avg" = runif(10), "z_c2e1_avg" = runif(10),
"x_c2e2_avg" = runif(10), "y_c2e2_avg" = runif(10), "z_c2e2_avg" = runif(10))
glimpse(data)
Тиббл содержит демографическую информацию, а затем три показателя, собранные в разных условиях, при этом некоторые показатели выполняются двумя экспертами (например, x_c1_avg - это среднее значение для показателя x, собранного в условии 1 (определенное положение ноги), а y_c2e1_avg - это значение среднее значение для меры y, полученное экспертом 1 при условии 2.
Итак, мой первый вопрос: правильно ли я, что вывод приведенного ниже кода будет считаться аккуратным? Измерение, условие и проверка находятся в своих собственных столбцах со значениями в другом столбце.
data2 <- data %>%
gather(key = "condition", value = "value", -c(subject_id:height)) %>%
separate(condition, into = c("measure", "condition"), sep = "_", extra = "drop") %>%
separate(condition, into = c("condition", "examiner"), sep = 2, fill = "right")
Мой второй вопрос: каков наиболее эффективный способ выполнить парное t.test для этих данных или есть способ сделать это, не создавая новые векторы для каждой переменной? Существует 12 условий в Всего, но я буду проводить t-тесты только для шести сравнений. Я бы сравнил меру х на с1 с мерой х на с2 для каждого субъекта или меру у экзаменатора 1 в условии 2 с мерой у экзаменатора 2 в условии 2 и так далее. Мой текущий код:
x_c1 <- data2 %>%
filter(measure == "x", condition == "c1") %>%
select(value)
x_c2_e2 <- data2 %>%
filter(measure == "x", condition == "c2", examiner == "e2") %>%
select(value)
t.test(x_c1$value, x_c2_e2$value, paired = TRUE)
Однако это кажется намного сложнее, чем нужно, и мне кажется, что я переворачиваю работу, которую проделал, чтобы получить ее в аккуратном формате. Было бы намного проще запустить это с самого начала:
t.test(data$x_c1_avg, data$x_c2e2_avg, paired = TRUE)