您好,感谢您的时间和考虑,
我想用 ggplot 重新创建这个图表。顶部的蓝点是我拟合模型na_lmod
的预测值,较低的红色值是多年来一个城市log_trip
的观测值。
你能帮我结合这三个功能 ggplot(平滑 / 点),预测和某种 dplyr 过滤器或东西吗?
这段代码给了我想要的感兴趣的城市的log_trip
和year
,但我很难把它绘制成图表。filter(transit, msaid == "Denver")[,c("log_trip", "year")]
期望输出:

这里有一个例子。首先,我将生成一些数据并估计模型。
library(tidyverse)
set.seed(123)
dat <- expand.grid(city = LETTERS[1:10],
year = 2006:2018)
dat$log_trip <- log(abs(dat$year * .05 + rnorm(nrow(dat), 0, 100)))
dat$year <- as.factor(dat$year)
mod <- lm(log_trip ~ year, data=dat)
接下来,我们需要制作一些用于预测的数据。对于此模型,由于year
是其中唯一的变量,因此此假设数据中只有year
。如果模型中有其他变量,则需要将它们保持在某个(大概是中心)值不变,例如平均值。
pred_dat <- data.frame(year = factor(2006:2018))
然后,我们可以生成具有置信度和预测区间的预测:
preds <- predict(mod, newdata=pred_dat, interval="confidence")
preds2 <- predict(mod, newdata=pred_dat, interval="prediction")
preds <- as.data.frame(preds)
接下来,我们将预测间隔放入press
数据帧中。
preds$lwr_pred <- preds2[,2]
preds$upr_pred <- preds2[,3]
pred_dat <- bind_cols(pred_dat, preds)
接下来,我们将预测数据和来自一个城市的观测数据(在本例中为“A”)连接起来。
pred_dat <- left_join(pred_dat, dat %>% filter(city == "A"))
对于绘图,我们需要将year
从一个因子转换为数字,然后我们可以制作绘图:
pred_dat %>%
mutate(year = as.numeric(as.character(year))) %>%
ggplot() +
geom_ribbon(aes(x=year, ymin = lwr_pred, ymax=upr_pred, fill="Prediction"), alpha=.25) +
geom_ribbon(aes(x=year, ymin = lwr, ymax=upr, fill="Confidence"), alpha=.25) +
scale_fill_manual(values=c("blue", "gray65")) +
geom_point(aes(x=year, y=fit, color="Predicted")) +
geom_point(aes(x=year, y=log_trip, colour="Observed (City A)")) +
scale_colour_manual(values=c("red", "blue")) +
scale_x_continuous(breaks=2006:2018) +
labs(colour="Points", fill = "Intervals", x="Year", y="Predicted Values") +
theme_clic()
创建于 2022-05-12 由reprex package(v2.0.1)
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(57条)