Построение отдельных ответов для двухстороннего повторного измерения мер с помощью geom_path из ggplot2
Я хочу использовать ggplot
а также geom_path
построить индивидуальные ответы, измеренные в полностью сбалансированном двустороннем эксперименте с повторными измерениями.
Я могу сгенерировать график, который я хочу, для данных, поступающих из аналогично структурированного проекта смешанной модели.
Мои наборы данных имеют аналогично структурированные данные. Каждый набор данных имеет переменную ответа "Response" и три независимых переменных.
В моем первом наборе данных (DF1) у меня есть "Участник", "Пол" и "Условие". Три женщины и четыре мужчины были включены, что делает "Гендер" фактором "между субъектами", а "Состояние" фактором "внутри субъектов", и это смешанная модель, если я не ошибаюсь.
DF1 <-
data.frame(
Response = c(3.2, 3.4, 3.5, 3.7, 3.2, 3.6, 3.5, 3.3, 3.3, 3.3, 3.3, 3.2, 3.4, 3.3),
Participant = as.factor(c(24, 33, 40, 24, 33, 40, 27, 30, 35, 42, 27, 30, 35, 42)),
Gender = c("female", "female", "female", "female", "female", "female", "male", "male", "male", "male", "male", "male", "male", "male"),
Condition = c("trained", "trained", "trained", "untrained", "untrained", "untrained", "untrained", "untrained", "trained", "untrained", "trained", "trained", "untrained", "trained"))
Во втором наборе данных (DF2) у меня есть "Участник", "Время" и "Условие". Одни и те же участники участвовали во всех комбинациях "Время" * "Условие", что делало его сбалансированным двухсторонним повторным измерением.
DF2 <-
data.frame(
Response = c(6.0, 6.4, 5.8, 6.3, 6.9, 6.2, 7.6, 7.2, 6.9, 7.0, 7.1, 7.1),
Participant = as.factor(c(2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4)),
Time = as.factor(c(6, 6, 6, 6, 6, 6, 18, 18, 18, 18, 18, 18)),
Condition = c("Nonexercise", "Nonexercise", "Nonexercise", "Exercise", "Exercise", "Exercise", "Nonexercise", "Nonexercise", "Nonexercise", "Exercise", "Exercise", "Exercise"))
Для моего первого кадра данных (DF1) я могу использовать ggplot
а также geom_path
с group
а также color
эстетика (aes
) чтобы получить сюжет, который имеет смысл.
library(ggplot2)
ggplot(DF1,
aes(x = Condition,
y = Response,
group = Participant,
color = Gender)) +
geom_path()
Если я пытаюсь использовать ту же настройку для моего второго кадра данных (DF2), данные выводятся на график, но таким образом, который не имеет смысла для меня.
ggplot(DF2,
aes(x = Time,
y = Response,
group = Participant,
color = Condition)) +
geom_path()
я могу использовать facet_grid
чтобы получить график, который имеет смысл, но это не идеально, потому что я хочу, чтобы все мои данные были на одном графике, подобно тому, что я вижу при построении графика DF1.
ggplot(DF2,
aes(x = Time,
y = Response,
group = Participant,
color = Participant)) +
geom_path() + facet_grid(.~Condition)
Вот.jpg всех моих графиков бок о бок
Конкретно хочу:
- Время по оси X
- Один цвет для "Упражнения" и другой цвет для "Без упражнений"
- Две строки для каждого участника (по одной для условий "Упражнение" и "Отсутствие упражнения")
Спасибо заранее за любые советы!
1 ответ
Вы хотите сгруппировать по обоим Condition
а также Paticipant
, Способ сделать это с помощью interaction()
функция:
library(ggplot2)
DF2 <- data.frame(
Response = c(6.0, 6.4, 5.8, 6.3, 6.9, 6.2, 7.6, 7.2, 6.9, 7.0, 7.1, 7.1),
Participant = as.factor(c(2, 3, 4, 2, 3, 4, 2, 3, 4, 2, 3, 4)),
Time = as.factor(c(6, 6, 6, 6, 6, 6, 18, 18, 18, 18, 18, 18)),
Condition = c("Nonexercise", "Nonexercise", "Nonexercise", "Exercise", "Exercise", "Exercise", "Nonexercise", "Nonexercise", "Nonexercise", "Exercise", "Exercise", "Exercise"))
ggplot(DF2) +
geom_path(aes(x = Time, y = Response, group = interaction(Condition, Participant), color = Condition)) +
geom_point(aes(x = Time, y = Response, shape = Participant, color = Condition), size = 3)
Я также добавил пункт с различными формами, чтобы улучшить ясность.
Это то, что вы просили. Если вы заинтересованы в моем мнении, замена сопоставления улучшит график еще больше (при условии, что изменения согласованы на других графиках):
ggplot(DF2) +
geom_path(aes(x = Time, y = Response, group = interaction(Condition, Participant), color = Participant)) +
geom_point(aes(x = Time, y = Response, shape = Condition, color = Participant), size = 3)