ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
106 stars 30 forks source link

R语言进行时间序列分析和预测 #3891

Closed ixxmu closed 12 months ago

ixxmu commented 12 months ago

https://mp.weixin.qq.com/s/ME2JIdSnH-UPt74ZPhzVwA

ixxmu commented 12 months ago

R语言进行时间序列分析和预测 by R语言数据分析指南

欢迎关注R语言数据分析指南

本节来介绍如何使用「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.250.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(0NA), breaks = seq(00.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(1111), "cm"),
        plot.background = element_rect(color = NA, fill = "grey80")) 

本节内容介绍到此结束,过程仅供参考;有需要学习个性化数据可视化的朋友,欢迎到小编的「淘宝店铺」 「R语言数据分析指南」购买「2023年度会员文档」同步更新中「售价149元」,内容主要包括各种「高分论文的图表分析复现以及一些个性化图表的绘制」均包含数据+代码;按照往年数据小编年产出约在150+以上

购买后微信发小编订单截图即邀请进新的会员交流群,小编的文档为按年售卖,只包含当年度的「除系列课程外」的文档,有需要往年文档的朋友也可下单购买,需要了解更多信息的朋友欢迎交流咨询。

小编微信

2023会员群案例展示