我正在使用 tempdisagg 包处理时间序列数据(Python 中有一个类似的包:https://github.com/jstephenj14/timedisagg)。
使用此软件包,您可以轻松地将低频时间序列(在我的情况下为每年)转换为高频时间序列(在我的情况下为每月)。
例如:
library(tempdisagg)
year_sums <- c(400, 450, 500, 800, 1000, 600)
low_freq_ts = ts(year_sums, frequency = 1, start=2018, end=2023)
model <- td(low_freq_ts ~ 1, conversion = "sum", to = "monthly",
method = "denton-cholette")
high_freq_ts = predict(model)
我现在的问题是,如何考虑现有的高频时间序列。
例如:
historic_ts <- c(3, 5, 6, 7, 5, 9, 10, 14, 17, 20, 19, 22)
historic_high_freq_ts = ts(historic_ts, frequency = 12,
start = c(2017,1), end = c(2017, 12))
最后我想得到一个平滑的高频时间序列,包括未触及的原始高频数据和分解值。
如果我只将历史值和预测值粘在一起,我会得到一些我不想得到的东西:
plot(ts(
c(historic_high_freq_ts, high_freq_ts)
, frequency = 12
, start = c(2017,1)
, end = c(2023, 12)
)
)
所以,最终disagg函数应该考虑历史趋势;我怎样才能做到这一点?
更广泛的应用是当我们的高频(HF)数据集可能包含多年记录(例如2017-2024)时,它是低频(LF)数据的函数(例如HF数据:通货膨胀,LF数据:货币)供应)。
我们如何通过统计稳健的方法将 HF 数据的趋势应用到 LF 数据上(将其分解为更小的时间步长)?
不幸的是,在问题中提出的情况下,您无能为力:1.因为两个时期没有共同点, 2.并且每个数据集的来源都不同(例如通货膨胀和GPD)。
总结一下你拥有的数据
如果数据来自同一来源:
td(low_freq_ts ~ 1,...)
如果数据有任何共同的时间段: 选项 1 - 假设数据是相关的,但通货膨胀的 LF 部分并不能很好地代表 GPD 的 LF 部分:
选项 2 - 假设数据是相关的,并且通货膨胀的 LF 部分确实可以很好地代表 GPD 的 LF 部分:
请。如果上述任何内容有意义,请告诉我,然后我们可能会找到更适合您的情况的 R/Python 包。