为什么 Arima.sim return 非固定 AR 模型的错误消息?
Why Arima.sim return the error message for non-stationary AR model?
当我在 R 中使用 Arima.sim 模拟 Ar 模型时,它返回了一条错误消息。
"Error in arima.sim... 'ar' part of model is not stationary"
例如:
set.seed(1)
ar = arima.sim(n = 400, list(ar = c(2)), sd = 1)
Error in arima.sim(n = 400, list(ar = c(2)), sd = 1) :
'ar' part of model is not stationary
我在网上查了一下,有迹象表明 arima.sim 无法处理非固定模型或某些季节性模型。为什么失败了?它与用于生成随机数的算法有什么关系吗?
AR(1) 模型 i.i.d。如果自回归参数 r 满足 |r|<1,则错误是平稳的。因此,您确实在尝试模拟非平稳情况。这使得 almost 完全有意义然后我们得到一个错误。
我希望不会出现错误的唯一非平稳情况是 |r|=1,即单位根情况。然后我们得到类似
的东西
其中错误是标准正态的。现在数值不小,但也不小。
然后当|r|>1 时,我们有一个爆炸案。是的,在那种情况下,算法也开始变得重要:因为在模拟 AR(1) 时,我们希望实现看起来逼真,所以我们有一个老化期,比方说,前 5000 个观察值被丢弃。在您的情况下,该算法可能会生成 5000+400 个观察值并仅向您显示最后 400 个(在固定情况下)。问题是,正如我所说,一旦 |r|>1,这些值就会很快变得无用。例如,
x <- numeric(50)
x[1] <- rnorm(1)
for(i in 2:length(x))
x[i] <- 2 * x[i - 1] + rnorm(1)
x
# [1] -1.274118e+00 -2.920323e+00 -2.690751e+00 -5.066151e+00 -1.169234e+01 -2.409816e+01
# [7] -4.787102e+01 -9.502020e+01 -1.912421e+02 -3.823547e+02 -7.653762e+02 -1.530197e+03
# [13] -3.060378e+03 -6.121630e+03 -1.224165e+04 -2.448105e+04 -4.896242e+04 -9.792375e+04
# [19] -1.958463e+05 -3.916917e+05 -7.833816e+05 -1.566764e+06 -3.133528e+06 -6.267057e+06
# [25] -1.253411e+07 -2.506823e+07 -5.013646e+07 -1.002729e+08 -2.005458e+08 -4.010917e+08
# [31] -8.021833e+08 -1.604367e+09 -3.208733e+09 -6.417467e+09 -1.283493e+10 -2.566987e+10
# [37] -5.133973e+10 -1.026795e+11 -2.053589e+11 -4.107179e+11 -8.214357e+11 -1.642871e+12
# [43] -3.285743e+12 -6.571486e+12 -1.314297e+13 -2.628594e+13 -5.257189e+13 -1.051438e+14
# [49] -2.102875e+14 -4.205751e+14
现在想象模拟 5000 个老化观察,然后提供以下 400 个。因此,|r|>1 的情况实际上模拟毫无意义。一个例外是,如果您假设 X0=c 对于某个固定常数 c 并且只想模拟几个周期;在那种情况下,您可以使用类似于我上面的循环的东西。
当我在 R 中使用 Arima.sim 模拟 Ar 模型时,它返回了一条错误消息。
"Error in arima.sim... 'ar' part of model is not stationary"
例如:
set.seed(1)
ar = arima.sim(n = 400, list(ar = c(2)), sd = 1)
Error in arima.sim(n = 400, list(ar = c(2)), sd = 1) :
'ar' part of model is not stationary
我在网上查了一下,有迹象表明 arima.sim 无法处理非固定模型或某些季节性模型。为什么失败了?它与用于生成随机数的算法有什么关系吗?
AR(1) 模型 i.i.d。如果自回归参数 r 满足 |r|<1,则错误是平稳的。因此,您确实在尝试模拟非平稳情况。这使得 almost 完全有意义然后我们得到一个错误。
我希望不会出现错误的唯一非平稳情况是 |r|=1,即单位根情况。然后我们得到类似
的东西其中错误是标准正态的。现在数值不小,但也不小。
然后当|r|>1 时,我们有一个爆炸案。是的,在那种情况下,算法也开始变得重要:因为在模拟 AR(1) 时,我们希望实现看起来逼真,所以我们有一个老化期,比方说,前 5000 个观察值被丢弃。在您的情况下,该算法可能会生成 5000+400 个观察值并仅向您显示最后 400 个(在固定情况下)。问题是,正如我所说,一旦 |r|>1,这些值就会很快变得无用。例如,
x <- numeric(50)
x[1] <- rnorm(1)
for(i in 2:length(x))
x[i] <- 2 * x[i - 1] + rnorm(1)
x
# [1] -1.274118e+00 -2.920323e+00 -2.690751e+00 -5.066151e+00 -1.169234e+01 -2.409816e+01
# [7] -4.787102e+01 -9.502020e+01 -1.912421e+02 -3.823547e+02 -7.653762e+02 -1.530197e+03
# [13] -3.060378e+03 -6.121630e+03 -1.224165e+04 -2.448105e+04 -4.896242e+04 -9.792375e+04
# [19] -1.958463e+05 -3.916917e+05 -7.833816e+05 -1.566764e+06 -3.133528e+06 -6.267057e+06
# [25] -1.253411e+07 -2.506823e+07 -5.013646e+07 -1.002729e+08 -2.005458e+08 -4.010917e+08
# [31] -8.021833e+08 -1.604367e+09 -3.208733e+09 -6.417467e+09 -1.283493e+10 -2.566987e+10
# [37] -5.133973e+10 -1.026795e+11 -2.053589e+11 -4.107179e+11 -8.214357e+11 -1.642871e+12
# [43] -3.285743e+12 -6.571486e+12 -1.314297e+13 -2.628594e+13 -5.257189e+13 -1.051438e+14
# [49] -2.102875e+14 -4.205751e+14
现在想象模拟 5000 个老化观察,然后提供以下 400 个。因此,|r|>1 的情况实际上模拟毫无意义。一个例外是,如果您假设 X0=c 对于某个固定常数 c 并且只想模拟几个周期;在那种情况下,您可以使用类似于我上面的循环的东西。