Closed ixxmu closed 12 months ago
❝本节来介绍如何使用「tidyverse与bsts包」来处理数据并进行时间序列分析及预测,下面小编通过一个案例来进行展示,图形仅供展示用,希望各位观众老爷能够喜欢。数据代码已经整合上传到2023VIP交流群,加群的观众老爷可自行下载,有需要的朋友可关注文末介绍加入VIP交流群
❞
library(tidyverse)
library(stringr)
library(janitor)
library(tsibble)
library(ggtext)
library(bsts)
library(tidybayes)
library(ggfx)
data <- readr::read_csv("data.txt")
df <- data %>%
clean_names() %>% # 清理列名
mutate(date = ymd(date)) %>% # 将date列转换为日期格式
rename(avg_price = apu000072610) %>%
filter(date > "2006-12-01") %>% # 过滤出日期大于2006-12-01的数据
mutate(avg_price = as.numeric(avg_price)) %>%
# 提取年、月、日信息
mutate(year = year(date), month = month(date), day = day(date)) %>%
# 将日期向下取整到月
mutate(date = floor_date(as_date(date), "month")) %>%
# 将日期转换为年月格式
mutate(date = yearmonth(date))
❝用bsts函数对avg_price进行拟合和预测。bsts包是用于Bayesian structural time series模型的R包,它可以用于时间序列数据的分析和预测。
❞
set.seed(1234) # 设置随机种子
# 添加局部线性趋势
ss <- AddLocalLinearTrend(list(), df$avg_price)
ss <- AddSeasonal(ss, df$avg_price, nseasons = 12) # 添加季节性
# 使用bsts函数拟合模型
model <- bsts(df$avg_price, state.specification = ss, niter = 1000)
horizon <- 48 # 设置预测的时间范围
# 创建预测数据框
df_forecast <- data.frame(date = max(df$date) + 1:horizon) %>%
# 添加预测值
add_draws(predict(model, horizon = horizon, burn = SuggestBurn(0.1, model),
quantiles = c(0.25, 0.75))$distribution) %>% =
sample_draws(200) # 随机抽取1000个样本
ggplot() +
# 添加原始数据的线条图层
geom_line(data = df, aes(x = as.Date(date), y = avg_price), color = "#FFFFFF", linewidth = 0.8) +
# 使用外发光效果添加预测数据的线条图层
with_outer_glow(
geom_line(data = df_forecast, aes(x = as.Date(date), y = .value, group = .draw),
linewidth = 0.3, color = "#69F0AE", alpha = 0.5),
color = "#69F0AE", sigma = 7) +
# 设置y轴的范围和刻度
scale_y_continuous(limits = c(0, NA), breaks = seq(0, 0.3, by = 0.04)) +
# 设置x轴的日期格式和刻度
scale_x_date(date_breaks = "2 years", date_labels = "%Y") +
# 使用最小主题
theme_minimal() +
# 设置图例、轴文本、轴标题、轴线、网格线和图背景的样式
theme(legend.position = "none",
axis.text = element_text(size = 8,color = "black"),
axis.title.y = element_text(size = 8,color = "black", margin = margin(r = 5)),
axis.title.x = element_text(size = 8,color = "black", margin = margin(t = 20)),
axis.line = element_line(color = "black", linewidth = 0.3),
panel.grid = element_line(color = "#616161", linewidth = 0.2, linetype = "dashed"),
plot.margin = unit(c(1, 1, 1, 1), "cm"),
plot.background = element_rect(color = NA, fill = "grey80"))
本节内容介绍到此结束,过程仅供参考;有需要学习个性化数据可视化的朋友,欢迎到小编的「淘宝店铺」 「R语言数据分析指南」购买「2023年度会员文档」同步更新中「售价149元」,内容主要包括各种「高分论文的图表分析复现以及一些个性化图表的绘制」均包含数据+代码;按照往年数据小编年产出约在150+以上
购买后微信发小编订单截图即邀请进新的会员交流群,小编的文档为按年售卖,只包含当年度的「除系列课程外」的文档,有需要往年文档的朋友也可下单购买,需要了解更多信息的朋友欢迎交流咨询。
https://mp.weixin.qq.com/s/ME2JIdSnH-UPt74ZPhzVwA