1

我有一个简单的问题,但我花了几天时间试图解决这个问题。我有一个长数据文件,重复测量,如下所示。

ID  DEPRESSION  TIME    GENDER
1   5   1   MALE
1   5   2   MALE
1   4   3   MALE
2   3   1   MALE
2   6   2   MALE
2   8   3   MALE
3   2   1   FEMALE
3   2   2   FEMALE
3   2   3   FEMALE

我想绘制不同性别的抑郁症随时间变化的趋势。然而,我所有的尝试都导致每个 ID 都有自己的线路。

我只想要一条男性线和一条女性线。

4

1 回答 1

1

这是一个 ggplot2 解决方案。在这里,我假设当你说你想要“趋势”时,你想为数据拟合一些模型。在这里,我为每个性别拟合了一个线性模型。

我不认为这张图那么好,因为它没有表明相同点是如何ID连接的。您可以通过多种方式处理此问题,如果您只有几个主题,则可以映射shape到,或者将它们连接并映射到.IDgeom_pathgroupID

library(ggplot2)

df <- read.table(
  text = "
ID  DEPRESSION  TIME    GENDER
1   5   1   MALE
1   5   2   MALE
1   4   3   MALE
2   3   1   MALE
2   6   2   MALE
2   8   3   MALE
3   2   1   FEMALE
3   2   2   FEMALE
3   2   3   FEMALE
  ",
  header = TRUE
)


ggplot(df, aes(x = TIME, y = DEPRESSION, color = GENDER)) + 
  geom_point() + 
  stat_smooth(method = "lm", se = FALSE)

在此处输入图像描述


对于平均线,您必须将每组的平均数预先计算到一个新的数据框中。在这里,我使用dplyr'sgroup_bysummarise为此,给我df_summarised. geom_hline然后我只能通过修改data参数来为图层使用新的数据框。

library(ggplot2)
library(dplyr)


df <- read.table(
  text = "
ID  DEPRESSION  TIME    GENDER
1   5   1   MALE
1   5   2   MALE
1   4   3   MALE
2   3   1   MALE
2   6   2   MALE
2   8   3   MALE
3   2   1   FEMALE
3   2   2   FEMALE
3   2   3   FEMALE
  ",
  header = TRUE
)


df_summarised <- df %>% 
  group_by(GENDER) %>% 
  summarise(MEAN_DEPRESSION = mean(DEPRESSION))

ggplot(df) + 
  geom_point(aes(x = TIME, y = DEPRESSION, color = GENDER) + 
  geom_hline(aes(yintercept = MEAN_DEPRESSION, color= GENDER), data = df_summarised)

在此处输入图像描述

于 2018-04-08T21:29:26.380 回答