r - 在 ggplot2 中跨时间绘制多个组的平均值

标签 r ggplot2

我确定以前有人问过这个问题,但我找不到有效的解决方案:

我有一个数据框,包含两组,每组 5 个样本,其中每个样本有十个观察值,在时间上等距分布。我想将此数据集绘制为一个时间序列,其中两条线连接每个时间点每个组的平均值。在每个时间点,我都希望有一些可变性度量(例如 95% 置信区间)。

例如数据集是:

group_a <- data.frame(runif(50, min=80, max=100), 1:10, rep("a", 10), c(rep("i", 10), rep("ii", 10), rep("iii", 10), rep("iv", 10), rep("v", 10)))

names(group_a) <- c("yvar", "xvar", "group", "sample")

group_b <- data.frame(runif(50, min=60, max=80), 1:10, rep("b", 10), c(rep("vi", 10), rep("vii", 10), rep("viii", 10), rep("ix", 10), rep("x", 10)))

names(group_b) <- c("yvar", "xvar", "group", "sample")

sample_data <- rbind(group_a, group_b)

所以每个时间点(xvar)有10个案例(sample)的观察值(yvar),平均分成两组(group)。最接近我正在寻找的答案的是以下内容:

require(ggplot2)

p <- ggplot(sample_data, aes(x = xvar, y = yvar)) + geom_line(aes(color = group, linetype = group))

print(p)

产生类似的东西:

所以这条线是按组划分的,但在每个时间点它都垂直跟随每个个案,而不是平均。

我正在寻找的东西更像是另一个答案中建议的东西:Plot time series with ggplot with confidence interval ,但图表上有多条线,不一定是连续的带状图。

有人有什么建议吗?我知道这应该非常简单,但我对 R 和 ggplot 比较陌生,显然找不到正确的搜索词(或者遗漏了一些非常明显的东西)。非常感谢任何帮助!

最佳答案

这里有两种变体。我建议预先计算您的摘要统计数据并将其输入 ggplot。

sample_sum <- sample_data %>%
  group_by(xvar, group) %>%
  summarize(mean = mean(yvar),
            sd   = sd(yvar),
            mean_p2sd = mean + 2 * sd,
            mean_m2sd = mean - 2 * sd) %>%
  ungroup()

第一种方法将平均值、平均值负 2 标准差和平均值加 2 标准差收集到同一列中,“stat”标记它是哪个统计数据,yvar 存储该值。 (我选择它们是因为 +/- 2 SD 捕获了约 95% 的正态分布。)然后我们可以在对 geom_line 的一次调用中将它们绘制在一起。

p <- ggplot(sample_sum %>%
              gather(stat, yvar, mean, mean_p2sd:mean_m2sd), 
            aes(x = xvar, y = yvar)) + 
  geom_line(aes(color = group, linetype = stat))
p

enter image description here

或者,我们可以将它们分开并使用 geom_ribbon 绘制 +/- 2 SD 区域。

p <- ggplot(sample_sum, aes(x = xvar,  color = group, fill = group)) + 
  geom_ribbon(aes(ymin = mean_m2sd, ymax = mean_p2sd), alpha = 0.1) +
  geom_line(aes(y= mean))

p

enter image description here

关于r - 在 ggplot2 中跨时间绘制多个组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53180486/

相关文章:

r - ggplot 按因子和梯度颜色

r - 是否可以直接在类 tbl_sql(或 tbl_dbi)上运行 SQL 查询?

RSQLite:如何增加列数和参数?

带重组的 R 对角网络(不仅仅是树的分离)

r - 微调ggplot2的geom箱线图

R 卡在 anim_save 渲染

r - 如何在R中找到矩阵/网络/图形的所有可能的 "continuous"路径

r - 从 .onLoad 包函数中调用 getNamespaceExports()

r - 箱线图和点图可以来自 ggplot 中的两个不同数据吗?

r - 具有负值问题的水平条形图