在 ggplot 上绘制置信区间

问题描述 投票:0回答:2

我对 r 还很陌生,所以请耐心等待。我正在绘制四个月期间的每日平均温度。我希望能够可视化我对数据的信心。我认为最好的方法是可视化整个图表的置信区间。我基本上只是想要以类似于我看到的格式(图 2)来可视化数据的传播。

I want something similar to Plot 2 from this picture

我使用了之前与我类似的堆栈溢出问题中的代码。我不完全理解代码正在做什么/执行什么,所以我很可能在某个地方出错,只需要一些关于如何执行此操作的一般指导。这是我正在使用的代码。

library(ggplot2)
library(stats)
library(dplyr)

(ggplot(DailyAvgL5, aes(Date, mean_temp)) +
  stat_summary(
    geom = 'smooth',
    fun.data = mean_cl_normal,
    fun.args = list(conf.int = 0.95),
    group = 1,
    alpha = 0.5,
    color = 'black',
    se = TRUE)
)

enter image description here

生成的图表只是折线图,没有显示传播的可视化。

这是我用于此图表的数据

dput(head(DailyAvgL5))
structure(list(Date = structure(c(19791, 19792, 19793, 19794, 
19795, 19796), class = "Date"), mean_temp = c(9.98765502929687, 
9.884833984375, 8.01781209309896, 8.70198394775391, 9.21991678873698, 
9.69807739257812), z_scoremean_temp = c(-1.34020216363965, -1.36818008165322, 
-1.87620239793434, -1.69003716229342, -1.54910606620731, -1.41899711641255
), overallmean = c(14.9037835315265, 14.9037835315265, 14.9037835315265, 
14.9037835315265, 14.9037835315265, 14.9037835315265)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

我认为置信区间是我想要使用的。我最初尝试可视化 z 分数,但也找不到方法。不确定可视化该数据的传播/置信度的最佳方向是什么。感谢您的帮助!

r ggplot2 confidence-interval standard-deviation
2个回答
0
投票

在均值计算之前没有所有数据,计算置信区间很棘手,因此我模拟了置信区间

ciInf
ciSup

在此示例中,我首先使用

geom_line
显示您的时间序列,然后使用
geom_ribbon
显示 ciInf 和 ciSup。

我还使用

alpha
值将
geom_ribbon
的黑色变成更透明的颜色。

请在下面找到一个可重现的示例。

### Simulate confidence intervals
set.seed(1)
ciVal <- rnorm(6, 0.1, 0.01)

### Initiating data
df <- data.frame(Date=structure(c(19791, 19792, 19793, 19794, 19795, 19796), class="Date"),
                 mean_temp=c(9.98765502929687,9.884833984375, 8.01781209309896, 8.70198394775391, 
                             9.21991678873698, 9.69807739257812))
df$ciInf <- df$mean_temp - ciVal
df$ciSup <- df$mean_temp + ciVal

### Display plot
ggplot(data=df, aes(x=Date, y=mean_temp)) + 
  geom_line() + 
  geom_ribbon(data=df, aes(ymin=ciInf, ymax=ciSup, x=Date), alpha=0.2)

enter image description here


0
投票

您显示的图汇总了与您的结构不同的数据(内置

iris
数据集)。 x 轴上的每个日期都有一个温度测量值,而示例图的 x 轴上的每种鸢尾花有 50 个萼片长度测量值。通过
iris
图,可以使用
stat_summary
直接计算每个物种的平均值和平均值的 95% 置信区间。您不能这样做,因为每个日期只有一次测量结果。

相反,您希望做一些更像回归的事情来找到实际温度变化的移动平均值。在

ggplot
中执行此操作的最简单方法是使用
geom_smooth
。其默认设置将生成局部多项式回归。您只提供了 6 个数据点,这不足以生成曲线,因此我添加了一些看似合理的数据行来演示(有关所使用的数据,请参阅答案的底部)。

基本调用是:

library(ggplot2)

ggplot(DailyAvgL5, aes(Date, mean_temp)) + 
  geom_smooth()

enter image description here

这以蓝色显示移动平均线,并在灰色带中显示移动平均线的 95% 置信区间。我怀疑你不想要蓝线,只想要你的原始数据和它后面的灰色带,在这种情况下你可以这样做

ggplot(DailyAvgL5, aes(Date, mean_temp)) + 
  geom_smooth(linetype = 0) +
  geom_line()

enter image description here

使用的数据

DailyAvgL5 <- structure(list(Date = structure(c(19791, 19792, 19793, 19794, 
19795, 19796, 19797, 19798, 19799, 19800, 19801, 19802, 19803, 
19804, 19805, 19806, 19807, 19808, 19809, 19810, 19811, 19812, 
19813, 19814, 19815, 19816), class = "Date"), mean_temp = c(9.98765502929687, 
9.884833984375, 8.01781209309896, 8.70198394775391, 9.21991678873698, 
9.69807739257812, 9.25, 10.28, 10.56, 10.11, 11.15, 10.73, 11.21, 
11.05, 11.38, 11.51, 10.74, 11.77, 11.02, 11.58, 11.82, 11.53, 
13.22, 11.24, 12.34, 12.69), z_scoremean_temp = c(-1.34020216363965, 
-1.36818008165322, -1.87620239793434, -1.69003716229342, -1.54910606620731, 
-1.41899711641255, -1.44, -1.4, -1.36, -1.32, -1.27, -1.23, -1.19, 
-1.15, -1.11, -1.07, -1.03, -0.99, -0.95, -0.91, -0.87, -0.83, 
-0.79, -0.75, -0.71, -0.67), overallmean = c(14.9037835315265, 
14.9037835315265, 14.9037835315265, 14.9037835315265, 14.9037835315265, 
14.9037835315265, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 
14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 14.9, 
14.9)), row.names = c(NA, -26L), class = c("tbl_df", "tbl", "data.frame"
))
© www.soinside.com 2019 - 2024. All rights reserved.