2017-08-16 794 views
0

從以下question中,我們創建了一些虛擬數據。然後將其轉換爲ggplot2可以理解的格式,我們生成一個簡單的圖表,顯示var隨時間的變化。用時間序列數據繪製ggplot2中的平均值和置信區間

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()函數,如herehere所述。

通過添加以下任一命令,我不會獲得平均值,也不會獲得置信區間。任何建議將不勝感激。

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") 

回答

3

如果我理解正確,你想用標準差顯示所有三個參數(var0,var1和var3)的平均值。

我確實有兩個解決方案。第一個暗示使用geom_ribbon()dplyr包和標準偏差和平均逐行,並進一步顯示的計算:

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