使用simulate.Arima()进行外部回归的未来模拟

时间:2012-11-06 18:08:55

标签: r forecasting

我的问题涉及预测中的simulate.Arima()功能。我有一个ARIMA函数,具有季节性,非零度差异和外部回归量(假期的虚拟变量)。这是一个可重复的例子:

y <- ts(c(3,5,10,13,4,15,13,17,20,24,26,27))
dummy <- data.frame(dummy=c(0,0,0,0,1,0,0,0,0,0,0,0))
arima.1 <- arima(y, order=c(1,1,0), xreg=dummy)

future.dummy <- data.frame(dummy=c(0,0,1,0,0,0,0,0,0,0,0,0))
n <- nrow(future.dummy)

sim.1 <- simulate(arima.1, nsim=n, xreg=future.dummy)

当我执行此操作时,收到错误消息。我注意到,当我设置参数future=FALSE时,它完全正常。

我的问题:simulate.Arima是否允许您使用新的外部回归器运行未来的模拟?换句话说,你必须在

之间做出选择
  1. 预测未来没有外部回归或
  2. 使用不同的外部回归模拟非未来数据?
  3. 如果是这种情况,是否可以开发在simulate()对象上运行predict.Arima的变通方法?我有一个非零度差异,所以我能够展望未来是很重要的。感谢您提供的任何见解。

1 个答案:

答案 0 :(得分:1)

我认为我追查了这个问题,所以我想我会继续回答我自己的问题。 arimaauto.arima(来自预测包)确切地输出的内容略有不同。对每种类型的对象进行简单的names调用可以发现差异。

names(arima.1)
[1] "coef"      "sigma2"    "var.coef"  "mask"      "loglik"    "aic"      
[7] "arma"      "residuals" "call"      "series"    "code"      "n.cond"   
[13] "model"

names(auto.arima.1)
[1] "coef"      "sigma2"    "var.coef"  "mask"      "loglik"    "aic"      
[7] "arma"      "residuals" "call"      "series"    "code"      "n.cond"   
[13] "model"     "bic"       "aicc"      "xreg"      "x"

请注意,auto.arima有一些额外的名称,最明显的是原始数据($x)和外部回归量($xreg)。因此,当您将arima构建的Arima对象提供给simulate.Arima时会产生问题。 simulate.Arima背后的代码似乎正确处理$x差异,但它失败了$xreg。因此,当您输入由arima构建的Arima对象时,函数代码会尝试引用object$xreg,但该对象没有附加此类名称,因此它只返回NULL。因此,当函数尝试使用object$xreg执行某些操作时,它会处理NULL,而不是由外部回归量组成的数据帧。该功能在以下行分解:

object$xreg <- cbind(intercept = rep(1, n), object$xreg)

我还注意到,在auto.arima的帮助页面上,在“值”部分下,简单地说“与arima相同”。虽然auto.arima确实输出了Arima对象,但附加到该对象的名称略有不同。

简而言之,使用auto.arima构建的外部回归量的Arima对象在simulate中完全正常,因为它具有$xreg组件。它仅针对由arima构建的Arima对象进行细分。

有没有人知道从xreg构建的没有附加arima名称的对象获取xreg参数信息的方法?