我对 r 还很陌生,所以请耐心等待。我正在绘制四个月期间的每日平均温度。我希望能够可视化我对数据的信心。我认为最好的方法是可视化整个图表的置信区间。我基本上只是想要以类似于我看到的格式(图 2)来可视化数据的传播。
我使用了之前与我类似的堆栈溢出问题中的代码。我不完全理解代码正在做什么/执行什么,所以我很可能在某个地方出错,只需要一些关于如何执行此操作的一般指导。这是我正在使用的代码。
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)
)
生成的图表只是折线图,没有显示传播的可视化。
这是我用于此图表的数据
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 分数,但也找不到方法。不确定可视化该数据的传播/置信度的最佳方向是什么。感谢您的帮助!
在均值计算之前没有所有数据,计算置信区间很棘手,因此我模拟了置信区间
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)
您显示的图汇总了与您的结构不同的数据(内置
iris
数据集)。 x 轴上的每个日期都有一个温度测量值,而示例图的 x 轴上的每种鸢尾花有 50 个萼片长度测量值。通过 iris
图,可以使用 stat_summary
直接计算每个物种的平均值和平均值的 95% 置信区间。您不能这样做,因为每个日期只有一次测量结果。
相反,您希望做一些更像回归的事情来找到实际温度变化的移动平均值。在
ggplot
中执行此操作的最简单方法是使用 geom_smooth
。其默认设置将生成局部多项式回归。您只提供了 6 个数据点,这不足以生成曲线,因此我添加了一些看似合理的数据行来演示(有关所使用的数据,请参阅答案的底部)。
基本调用是:
library(ggplot2)
ggplot(DailyAvgL5, aes(Date, mean_temp)) +
geom_smooth()
这以蓝色显示移动平均线,并在灰色带中显示移动平均线的 95% 置信区间。我怀疑你不想要蓝线,只想要你的原始数据和它后面的灰色带,在这种情况下你可以这样做
ggplot(DailyAvgL5, aes(Date, mean_temp)) +
geom_smooth(linetype = 0) +
geom_line()
使用的数据
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"
))