0
maxP <- 2       
maxQ <- 2
AIC  <- matrix(0,nrow=maxP,ncol=maxQ)
BIC  <- matrix(0,nrow=maxP,ncol=maxQ)
HQC  <- matrix(0,nrow=maxP,ncol=maxQ)

# Save all information criteria
 for (p in 0:maxP){
  for(q in 0:maxQ){
     if (p>0) {ARLags <- 1:p} 
    else {ARLags <- 0}

    if (q>0) {MALags <- 1:q} 
    else{MALags <- 0}

    # Estimate the model
    CPI_fit <- arma(CPI, order(ARLags, MALags, include.intercept = TRUE)
    # Save the criteria in a P x Q matrix
    AIC[p+1, q+1] <- CPI_fit$aic
    BIC[p+1, q+1] <- CPI_fit$bic
  }
}

AIC
BIC

我正在尝试创建一个自动程序来选择 ARMA 模型的模型规范,但我总是收到以下错误消息:

Error in if (N <= 0) NULL else seq(N) : 
 missing value where TRUE/FALSE needed

这是什么意思,我该如何预防?

4

1 回答 1

0

我假设您正在使用tseries::arma.


问题在于通话

arma(CPI, order(ARLags, MALags), include.intercept = TRUE)

您可以通过调用找到调用错误的原因traceback()。这为我们提供了错误的线索:

2: seqN(order[2])
1: arma(CPI, order(ARLags, MALags), include.intercept = TRUE)

第二个正式的armaorder您提供的order(ARLags, MALags)。这意味着对于函数调用,我们有

order = order(ARLags, MALags)

从上面使用的函数的描述 order

order返回一个排列,它将其第一个参数重新排列为升序或降序,通过进一步的参数打破平局。sort.list是一样的,只使用一个参数。

(强调我的)此排列用于对数据进行排序,并且是与输入长度相同的向量。同时,正式的tseries::arma根据帮助页面:

order 一个二维整数向量,给出要拟合的模型的阶数。order[1]对应于 AR 部分和order[2]MA 部分。

这就是冲突。arma需要一个二维整数向量,但提供一个一维向量,因为对于p = 0thenARlags = 0order(0) = 1.


您要提供arma的是order = c(p,q)- AR 和 MA 部分中的最大滞后项。尝试这个

CPI_fit <- arma(CPI, c(p, q), include.intercept = TRUE)
于 2017-11-10T17:20:17.547 回答