代码之家  ›  专栏  ›  技术社区  ›  user08041991

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

  •  1
  • user08041991  · 技术社区  · 9 年前

    从以下内容 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()
    

    我想绘制三个的平均值 风险值 可能带+-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 回复  |  直到 9 年前
        1
  •  4
  •   Mal_a    9 年前

    如果我理解正确,你想用标准差显示所有三个参数(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)
    

    enter image description here

    你提到的第二个解决方案 stat_summary() ,它实际上与您提供的代码配合良好:

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

    enter image description here