【问题标题】:ar(1) simulation with non-zero meanar(1) 非零均值模拟
【发布时间】:2015-01-07 14:06:09
【问题描述】:

我似乎找不到正确的方法来模拟均值不为零的 AR(1) 时间序列。 我需要 53 个数据点,rho = .8,mean = 300。

但是,arima.sim(list(order=c(1,0,0), ar=.8), n=53, mean=300, sd=21) 给我1500年代的价值。例如:

1480.099 1480.518 1501.794 1509.464 1499.965 1489.545 1482.367 1505.103(等等)

我也试过arima.sim(n=52, model=list(ar=c(.8)), start.innov=300, n.start=1) 但它只是像这样倒计时:

238.81775870 190.19203239 151.91292491 122.09682547 96.27074057 [6] 77.17105923 63.15148491 50.04211711 39.68465916 32.46837830 24.78357345 21.27437183 15.93486092 13.40199333 10.99762449 8.70208879 5.62264196 3.15086491 2.13809323 1.30009732 P>

我已经尝试过arima.sim(list(order=c(1,0,0), ar=.8), n=53,sd=21) + 300,这似乎给出了正确的答案。例如:

280.6420 247.3219 292.4309 289.8923 261.5347 279.6198 290.6622 295.0501 264.4233 273.8532 261.9590 278.0217 300.6825 291.4469 291.5964 293.5710 285.0330 274.5732 285.2396 298.0211 319.9195 324.0424 342.2192 353.8149 等等..

但是,我怀疑这样做是否正确?那么它仍然会自动关联到正确的数字吗?

【问题讨论】:

  • 如果您不确定,请检查 meanacf 以获得较大的 n 值。

标签: r time-series autoregressive-models


【解决方案1】:

您的最后一个选项可以得到所需的平均值“mu”。它从模型中生成数据:

(y[t] - mu) = phi * (y[t-1] - mu) + \epsilon[t], epsilon[t] ~ N(0, sigma=21), t=1,2,...,n.

您的第一种方法设置截距,“alpha”,而不是平均值:

y[t] = alpha + phi * y[t-1] + epsilon[t]。

您的第二个选项将初始值 y[0] 设置为 300。只要 |phi|

编辑

您在模拟数据中观察到的标准差值是正确的。请注意,AR(1) 过程的方差 y[t] 不等于创新的方差 epsilon[t]。 AR(1)过程的方差sigma^2_y可以得到如下:

Var(y[t]) = Var(alpha) + phi^2 * Var(y[t-1]) + Var(epsilon[t])

由于过程是平稳的 Var(y[t]) = Var(t[t-1]),我们称之为 sigma^2_y。因此,我们得到:

sigma^2_y = 0 + phi^2 * sigma^2_y + sigma^2_epsilon sigma^2_y = sigma^2_epsilon / (1 - phi^2)

对于您使用的参数值,您有:

sigma_y = sqrt(21^2 / (1 - 0.8^2)) = 35.

【讨论】:

  • 我还有一个问题。虽然我将标准差指定为 21,但如果我模拟多个示例系列,平均 SD 会高得多 (35)。对此有什么想法吗?
【解决方案2】:

使用ts.extend包中的rGARMA函数

您可以使用 ts.extend 包从任何固定高斯 ARMA 模型生成随机向量。这个包使用计算的随机向量的自相关矩阵直接从多元正态分布生成随机向量,因此它从精确分布中给出随机向量,并且不需要“老化”迭代。这是一个从 AR(1) 模型生成多个独立时间序列向量的示例。

#Load the package
library(ts.extend)

#Set parameters
MEAN     <- 300
ERRORVAR <- 21^2
AR       <- 0.8
m        <- 53

#Generate n = 16 random vectors from this model
set.seed(1)
SERIES <- rGARMA(n = 16, m = m, mean = MEAN, ar = AR, errorvar = ERRORVAR)

#Plot the series using ggplot2 graphics
library(ggplot2)
plot(SERIES)

如您所见,此图中生成的时间序列向量使用输入中指定的适当均值和误差方差。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2016-09-28
    • 2018-12-19
    • 2017-05-26
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多