在 ggplot2 中为时间序列数据绘制具有置信区间的平均值

Posted

技术标签:

【中文标题】在 ggplot2 中为时间序列数据绘制具有置信区间的平均值【英文标题】:plotting average with confidence interval in ggplot2 for time-series data 【发布时间】:2018-01-24 09:03:27 【问题描述】:

从下面的question,我们创建了一些虚拟数据。然后将其转换为ggplot2 可以理解的格式,并生成一个简单的图表,显示var 随时间的变化。

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    var2 = 120 + c(0, cumsum(runif(49, -5, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )
#
library("reshape2")
library("ggplot2")
#
test_data_long <- melt(test_data, id="date")  # convert to long format

ggplot(data=test_data_long,
       aes(x=date, y=value, colour=variable)) +
  geom_line() + theme_bw()

我想在同一张图中绘制三个var 的平均值,并显示平均值的置信区间。 可能是 +-1SD。为此,我认为可以使用stat_summary() 函数,如here 和here 所述。

通过添加以下任一命令,我无法获得平均值,也无法获得置信区间。任何建议将不胜感激。

stat_summary(fun.data=mean_cl_normal)
  #stat_summary(fun.data ="mean_sdl", mult=1, geom = "smooth")
  #stat_summary(fun.data = "mean_cl_boot", geom = "smooth")

【问题讨论】:

【参考方案1】:

如果我理解正确,您想显示所有三个参数(var0、var1 和 var3)的平均值和标准差。

我确实有两个解决方案。第一个暗示dplyr 封装和计算标准差和平均行,并使用geom_ribbon() 进一步显示:

library(dplyr)
library(magrittr)
q <- test_data
q <- q %>% rowwise() %>% transmute(date, mean=mean(c(var0,var1,var2), na.rm=TRUE), sd = sd(c(var0,var1,var2), na.rm=TRUE))

eb <- aes(ymax = mean + sd, ymin = mean - sd)
ggplot(data = q, aes(x = date, y = mean)) + 
  geom_line(size = 2) + 
  geom_ribbon(eb, alpha = 0.5)

stat_summary()提到的第二种解决方案,实际上与您提供的代码配合得很好:

ggplot(data=test_data_long, aes(x=date, y=value)) +
  stat_summary(fun.data ="mean_sdl", mult=1, geom = "smooth") + theme_bw()

【讨论】:

以上是关于在 ggplot2 中为时间序列数据绘制具有置信区间的平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 中的 ggplot 绘制具有相同颜色的填充点和置信椭圆?

在 ggmap 和 ggplot2 中为英国绘制地图

ggplot2应用(二)——火山图绘制(volcano plot)

在 R 中以 95% 的置信区间绘制密度图

R语言ggplot2可视化:置信区间与分组具有相同色彩自定义置信区间带的色彩Make confidence intervals the same color as line by group

如何在ggplot lineplot中为具有相似颜色的多个子类着色?