r - 季度到每周数据的插值
问题描述
我目前正在尝试通过所谓的插值从季度数据中预测每周数据。不幸的是,我现在在找到正确的方法时遇到了一些麻烦,因为我认为 R 中的 approx 函数可能不是最好的情况。您是否有其他方法可以尝试将这些会计数据从季度数据转换为每周数据。
期待听到建议。
解决方案
假设问题
给定季度数据:
- 插入每周数据点
- 然后预测未来的每周周期
R 中的示例,因为我非常喜欢R。
第 1 部分。插入每周数据点
来自美联储的示例季度数据集:
require(tidyverse)
require(lubridate)
require(timeSeries)
require(xts)
require(tsbox)
gdp_data<-
tribble(
~DATE, ~GDPC1,
20180101, 18438.254,
20180401, 18598.135,
20180701, 18732.72,
20181001, 18783.548,
20190101, 18927.281,
20190401, 19021.86,
) %>%
mutate(DATE = ymd(alignQuarterly(ymd(DATE)))) %>%
ts_xts()
生成的 xts 对象:
> gdp_data
GDPC1
2018-03-30 18438.25
2018-06-29 18598.13
2018-09-29 18732.72
2018-12-31 18783.55
2019-03-30 18927.28
2019-06-29 19021.86
样条插值的季度末期至周末期
# create weekly time periods
weekly_dates<-
gdp_data %>%
index() %>%
alignQuarterly() %>%
align(by = "w") %>%
ymd() %>%
as.xts()
# approximate values for each week
interpolated_data<-
weekly_dates %>%
merge(gdp_data) %>%
na.spline() %>%
merge(weekly_dates, join = 'right')
生成的 xts 对象:
> interpolated_data %>% tail(10)
GDPC1
2019-04-26 18969.86
2019-05-03 18979.35
2019-05-10 18988.07
2019-05-17 18995.95
2019-05-24 19002.92
2019-05-31 19008.91
2019-06-07 19013.87
2019-06-14 19017.70
2019-06-21 19020.36
2019-06-28 19021.77
以图表形式查看输出:
interpolated_data %>% plot()
第 2 部分。预测未来的每周周期
指数状态空间模型示例
require(forecast)
projection<-
interpolated_data %>%
ts_ts() %>%
ets('MAN', damped = F) %>%
predict(10)
结果 ts 预测:
> projection
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
2019.506 19023.17 19022.34 19024.00 19021.90 19024.45
2019.525 19024.58 19022.72 19026.44 19021.73 19027.43
2019.544 19025.98 19022.87 19029.10 19021.22 19030.75
2019.563 19027.39 19022.83 19031.95 19020.42 19034.37
2019.582 19028.80 19022.62 19034.97 19019.35 19038.24
2019.602 19030.20 19022.26 19038.15 19018.05 19042.35
2019.621 19031.61 19021.76 19041.46 19016.54 19046.68
2019.640 19033.02 19021.12 19044.91 19014.83 19051.21
2019.659 19034.42 19020.36 19048.48 19012.92 19055.92
2019.678 19035.83 19019.49 19052.17 19010.84 19060.82
以图形方式查看投影:
require(ggplot2)
projection %>%
autoplot()
推荐阅读
- json - 如何创建 JSON 文件结构,然后使用 bash 输出通过 jq 填充
- reactjs - 试图改变这个的背景颜色
datepicker material-UI 组件(提供 CodeSandbox) - docker - 如何在 Windows 10 中使用 Docker 中的 thenets/parsoid 将本地文本文件转换为 html?
- javascript - 验证+提交后反应输入值从定义变为未定义
- java - 更改代理和脚本库的默认 Java 版本
- c - 释放单链表的内存时出现无效的 free() 错误
- vim - Vim,映射非标准键(前进/后退/放大/缩小/收藏夹)
- windows - 用于从子文件夹和子文件夹中的文件中删除破折号的 Windows 批处理脚本
- regex - Fluent-Bit 是如何提取日志时间的,并且仍然保留原始日志时间的输出?
- python - 在 Tk.Canvas 中制作新的 Pillow 图像时,为什么数组有效但变量无效?