在 R 中生成一个包含季节性、趋势和剩余分量的时间序列

机器算法验证 r 时间序列 随机生成
2022-03-20 06:05:55

我想生成一个包含三个组件的时间序列:季节性组件、趋势组件和剩余组件。此外,我希望能够改变趋势、季节性和随机性的水平。我怎样才能使用 R 做到这一点?请你帮助我好吗

1个回答

一种可能性是根据 Harvey (1989) 中描述的基本结构时间序列模型的状态空间表示生成数据。

Harvey, AC (1989) 预测、结构时间序列模型和卡尔曼滤波器剑桥大学出版社。

基本结构模型定义如下:

observed series:yt=μt+γt+ϵt,ϵtNID(0,σϵ2);latent level:μt=μt1+βt1+ξt,ξtNID(0,σξ2);latent drift:βt=βt1+ζt,ζtNID(0,σζ2);latent seasonal:γt=j=1s1γtj+ωt,ωtNID(0,σω2),

为了t=s,,n;s是数据的周期性(例如s=4季度数据)。

该模型提供了一个灵活的框架来生成您感兴趣的数据类型。设置σω2=0产生一个具有确定性季节性的模型。设置也γ1==γs1=0σζ2=0去除季节性成分并给出局部水平模型(随机游走加噪声模型与漂移β0)。如果σζ2>0获得局部趋势模型,其中漂移遵循随机游走。

stsmdatagen.stsm包中的函数从此模型生成数据。例如,用于测试包的一些模拟练习中使用的数据生成如下:

# generate a quarterly series from a local level plus seasonal model
require(stsm)
pars <- c(var1 = 300, var2 = 10, var3 = 100)
m <- stsm.model(model = "llm+seas", y = ts(seq(120), frequency = 4), 
  pars = pars, nopars = NULL,)
ss <- char2numeric(m)
set.seed(123)
y <- datagen.stsm(n = 120, model = list(Z = ss$Z, T = ss$T, H = ss$H, Q = ss$Q), 
  n0 = 20, freq = 4, old.version = TRUE)$data
plot(y, main = "data generated from the local-level plus seasonal component")

从 llm+季节性模型模拟的数据