r - ar(1) 非零均值模拟

标签 r time-series autoregressive-models

我似乎找不到正确的方法来模拟平均值不为零的 AR(1) 时间序列。
我需要 53 个数据点,rho = .8,平均值 = 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

我试过 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
等等..

但是,我怀疑这是在做正确的事情吗?那么它是否仍然与正确的数字自​​动相关?

最佳答案

您的最后一个选择是可以得到所需的平均值“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|<1,此初始值的影响将在几个周期后消失,不会产生任何影响
在系列水平上。

编辑

您在模拟数据中观察到的标准偏差值是正确的。请注意,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。

关于r - ar(1) 非零均值模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27821238/

相关文章:

r - 因子强制为数据框中的 *each* 行生成数字标签,而不是指定的标签

r - 从多个混淆矩阵中提取指标并填充数据框

r - ggplot 时间序列绘图 : group by dates

python - Bokeh 中的 TimeSeries 使用带索引的数据框

r - 如何在 R 中的 glm 模型中自动包含所有双向交互

r - 我们如何对 Shiny 的变量进行预处理步骤

R 包 xtsExtra 问题绘制多个 ts

r - Auto.arima() 函数不会产生白噪声。我还应该如何进行数据建模

python - ARMA.predict 的预测区间