相同的 y 轴变量,scatter-plot 和长格式

same y axis variable , scatter-plot and long format

假设两个不同的评分者正在评估行为问题。他们使用相同的等级(从 0 到 50),并且被评估的 child 对于两个评分者来说是相同的。在社会科学中,这种方法很常见,并且有一些有用的统计数据,例如相关系数和Intra-Class Correlation.

此外,我想到的一个图表是 scatter-plot,在 x-axys 中,我将考虑第一个评分者和 y-axis 中的行为问题分数], 我会为第二个评价者做同样的事情。

gplot2创造了惊人的情节,然而,一些简单的套路和动作变得非常困难。

请参阅下面的代码和 r 底图。我想知道 ggplot 是否也可以创建此图。

非常感谢

   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'])

== 我不得不编辑以弄清楚为什么 scatter-plot 会提供信息==

我认为这里的关键问题是您设置数据框的方式。目前尚不清楚每个人都会得到一对分数,每个评价者各有一个。因此,首先要做的是为每个人添加一个 ID:示例数据中有 50 个 ID。

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

现在我们可以使用 tidyr::spread 为每个评估者创建一个列。但是列名的数字不是一个好主意,所以我们将它们重命名为 e1e2.

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()

如果这看起来像 "long way around",那是因为 ggplot2 使用 "long" 数据(传播前)比 "wide"(传播后)更好。为了说明这一点,这里有另一种可视化个人分数差异的方法,我认为这种方法非常有效:

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