та же переменная оси y, точечная диаграмма и длинный формат - PullRequest
0 голосов
/ 04 июля 2018

Допустим, два разных оценщика оценивают поведенческие проблемы. Они используют одну и ту же шкалу (от 0 до 50), и оцениваемый ребенок одинаков для обоих оценщиков. В общественных науках этот метод распространен, и есть некоторые полезные статистические данные, такие как коэффициент корреляции и внутриклассовая корреляция.

Кроме того, один график, который мне приходит в голову, - это график рассеяния, и в оси абсцисс я буду отображать оценки проблем поведения с учетом первого оценщика и по оси Y, я сделаю то же самое. для второго оценщика.

gplot2 создает удивительные сюжеты, однако некоторые простые процедуры и действия становятся действительно трудными для выполнения.

Пожалуйста, смотрите код ниже и базовый график r. Я хотел бы знать, может ли ggplot создать этот сюжет.

Большое спасибо scatter plot r base

   set.seed(123)
ds <- data.frame(behavior_problems = rnorm(100,30,2), evaluator=sample(1:2))
plot(ds$behavior_problems[ds$evaluator == '1'] ,
     y =  ds$behavior_problems[ds$evaluator == '2'])

== Мне пришлось отредактировать, чтобы понять, почему точечная диаграмма была бы информативной ==

1 Ответ

0 голосов
/ 05 июля 2018

Я думаю, что ключевой проблемой здесь является способ, которым вы настроили фрейм данных. Не ясно, что каждый человек получает пару баллов, по одному от каждого оценщика. Поэтому первое, что нужно сделать, это добавить идентификатор для каждого человека: 50 идентификаторов в данных вашего примера.

library(tidyverse)
ds %>% 
  mutate(id = rep(1:50, each = 2) 

Теперь мы можем использовать tidyr::spread, чтобы создать столбец для каждого оценщика. Но числа для имен столбцов не очень хорошая идея, поэтому мы переименуем их в e1 и e2.

ds %>% 
  mutate(id = rep(1:50, each = 2)) %>% 
  spread(evaluator, behavior_problems) %>% 
  rename(e1 = `1`, e2 = `2`)

Теперь у нас есть имена столбцов, которые можно указывать для ggplot:

ds %>% 
  mutate(id = rep(1:50, each = 2)) %>% 
  spread(evaluator, behavior_problems) %>% 
  rename(e1 = `1`, e2 = `2`) %>% 
  ggplot(aes(e1, e2)) + 
    geom_point()

enter image description here

Если это выглядит как "длинный путь", то это потому, что ggplot2 лучше работает с "длинными" данными (до распространения), чем с "широкими" (после распространения). Чтобы проиллюстрировать это, вот еще один способ визуализировать разницу в баллах по отдельным лицам, которая, я думаю, работает довольно хорошо:

ds %>% 
  mutate(id = rep(1:50, each = 2), 
         evaluator = factor(evaluator)) %>% 
  ggplot(aes(id, behavior_problems)) + 
    geom_point(aes(color = evaluator)) + 
    geom_line(aes(group = id))

enter image description here

...