繁体   English   中英

用ggplot绘制具有置信区间的均值

[英]plotting the means with confidence intervals with ggplot

我有一些从模型收集的数据。 我想绘制一段时间内的人口数量。 我有每个时间步骤的人口规模,并且有100个重复样本。 我想绘制每个时间步的平均人口规模以及95%的置信区间(如果可能的话,以阴影表示)。

我以前没有用过ggplot 到目前为止,我一直在使用R中的普通(基本)图。 但是我想看看ggplot会是什么样子。

这是我到目前为止的内容:

ggplot(data=model1, aes(x=steps., y= pop-size, col='blue')) + 
   geom_line()

这样可以绘制所有点,看起来不错,但是我不知道如何绘制均值并添加置信区间。

由于您已经复制了数据,并且想要绘制均值/ CL,因此最好使用stat_summary(...) ,它专门用于汇总数据(您猜对了)。 基本上,它将函数应用于每个x值的所有y值(例如, mean(...)函数),然后使用您指定的任何几何图形绘制结果。 这是一个例子:

# sample data - should be provided in question
set.seed(1)      # for reproducible example
time <- 1:25
df   <- data.frame(time,
                   pop=rnorm(100*length(time), mean=10*time/(25+time)))

library(ggplot2)
ggplot(df, aes(x=time, y=pop))+ 
  stat_summary(geom="ribbon", fun.data=mean_cl_normal, width=0.1, conf.int=0.95, fill="lightblue")+
  stat_summary(geom="line", fun.y=mean, linetype="dashed")+
  stat_summary(geom="point", fun.y=mean, color="red")

因此,这里有3层:使用mean(...)函数汇总y值的层,以及使用geom="line"绘图的层,使用geom="line"进行相同汇总的层,但使用geom="point"绘图,以及一个使用geom="ribbon"的图层。此geom需要yminymax美观度,因此我们使用内置的ggplot函数mean_cl_normal来生成误差,假设误差是正态分布的,因此均值遵循t分布。 键入?hmisc以获取有关对置信度限制有用的各种功能的文档。 图层按代码顺序渲染,因此,由于要着色,我们需要首先放置错误功能区。

最后,当然可以使用dplyr或类似的工具自己汇总数据,但是我真的不知道这样做的意义。

更新 (基于最近的评论):看起来最新版本的ggplot2 (2.0.0)具有不同的方式来指定fun.data的参数。 在新版本中适用:

ggplot(df, aes(x=time, y=pop))+ 
    stat_summary(geom="ribbon", fun.data=mean_cl_normal, 
                 fun.args=list(conf.int=0.95), fill="lightblue")+
    stat_summary(geom="line", fun.y=mean, linetype="dashed")+
    stat_summary(geom="point", fun.y=mean, color="red")

我认为width=...参数的问题更加微妙:实际上是不需要的(在原始答案中,我使用了误差线,并且当我将其更改为功能区时,忘记删除此参数)。 较旧的ggplot2版本忽略了无关的参数(因此,没有错误)。 显然,新版本更加严格。 可能更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM