gpt4 book ai didi

r - 使用 ggplot 以置信区间绘制时间序列

转载 作者:行者123 更新时间:2023-12-04 10:26:17 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Add ribbon showing mean and interquartile range to ggplot2

(2 个回答)


3年前关闭。




如果我有一个包含时间序列的数据表,其中每个时间戳都有多个观察值,是否有直接的方法来绘制该数据集的均值和间隔?

例如,创建数据集:

dt <- lapply(seq(1,10),function(x) {
dt <- data.table(Time = seq(1,100),
Value = seq(1,100)* 3 + rnorm(100,5,20))
})

dt <- rbindlist(dt,idcol = 'Run')

ggplot(dt,aes(Time,Value,group = Run)) +
geom_line(size = 0.1,alpha = 0.5)

每个时间戳都有多个观察值。我希望情节看起来像这样:
ggplot(dt[,list(Value = mean(Value),
MaxValue = quantile(Value, 0.9),
MinValue = quantile(Value, 0.1)),
list(Time)])+
aes(x = Time, y = Value,ymin = MinValue,ymax = MaxValue)+
geom_line()+
geom_ribbon(alpha = 0.3)

这有效,但似乎有很多行应该更简单。例如,如果我在做 boxplot,我可以在一个更简单的 ggplot 调用中做到这一点:
ggplot(dt)+
aes(x = factor(Time), y = Value)+
geom_boxplot()

感谢您的帮助!

最佳答案

我们可以使用 stat_summary如以下方式。

ggplot(dt,aes(Time, Value)) +
stat_summary(geom = "line", fun.y = mean) +
stat_summary(geom = "ribbon", fun.data = mean_cl_normal, alpha = 0.3)

enter image description here

如果你仍然想要 90 和 10 个百分位数的平均值,你需要设计一个函数返回 y , ymin , 和 ymax你的数字数据
mean_cl_quantile <- function(x, q = c(0.1, 0.9), na.rm = TRUE){
dat <- data.frame(y = mean(x, na.rm = na.rm),
ymin = quantile(x, probs = q[1], na.rm = na.rm),
ymax = quantile(x, probs = q[2], na.rm = na.rm))
return(dat)
}

ggplot(dt,aes(Time, Value)) +
stat_summary(geom = "line", fun.y = mean) +
stat_summary(geom = "ribbon", fun.data = mean_cl_quantile, alpha = 0.3)

enter image description here

或者作为 alistaire 的评论:
ggplot(dt, aes(Time, Value)) + 
geom_smooth(stat = 'summary', fun.data = mean_cl_quantile)

enter image description here

关于r - 使用 ggplot 以置信区间绘制时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51993044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com