相同的y轴变量,散点图和长格式

时间:2018-07-03 21:33:11

标签: r ggplot2 scatter-plot

假设两个不同的评估者正在评估行为问题。他们使用相同的量表(从0到50),并且两个评估者所评估的孩子都相同。在社会科学中,这种方法很普遍,并且有一些有用的统计数据,例如相关系数和类内相关。

此外,我想到的一个图形是散点图,在x轴上,我将考虑第一评级者并在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 :(得分:1)

我认为这里的关键问题是建立数据帧的方式。尚不清楚每个人都得到一对分数,每个评估者一个。因此,第一件事就是为每个人添加一个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()

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