【问题标题】:Error in if (N <= 0) NULL else seq(N) : missing value where TRUE/FALSE neededif (N <= 0) NULL else seq(N) 中的错误:需要 TRUE/FALSE 的缺失值
【发布时间】:2017-11-10 15:15:01
【问题描述】:
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

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

【问题讨论】:

  • 您能否将您的CPI 变量中的一部分包含在内以便可以复制它?
  • order(ARLags, MALags, include.intercept = TRUE) 返回一个长度为 1 的向量,但 arma 期望正式的 order 的长度为 2。
  • 试试CPI_fit &lt;- arma(CPI, order = c(p,q), include.intercept = TRUE)
  • 你了解order 的作用吗?它是一个返回输入的 order 的函数,即对于输入 c(1,3,2,5),它以升序返回输入的输入顺序:order(c(1,3,2,5)) = c(1,3,2,4)。函数 tseries::arma 期望形式参数 order 是长度为 two 的向量,其中第一个元素是 AR 部分,第二个元素是 ARMA 模型的 MA 部分。

标签: r time-series arima


【解决方案1】:

我假设您使用的是tseries::arma


问题出在调用

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

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

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

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

order = order(ARLags, MALags)

来自上面使用的函数orderdescription

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

(强调我的)此排列用于对数据进行排序,并且是与输入长度相同的向量。同时,正式在tseries::armaaccording to the help page:

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

这就是冲突。 arma 需要一个二维整数向量,但提供了一个一维向量,因为p = 0 然后是ARlags = 0order(0) = 1


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

CPI_fit <- arma(CPI, c(p, q), include.intercept = TRUE)

【讨论】:

  • for (p in 0:maxP){ for(q in 0:maxQ){ if (p&gt;0) {ARLags &lt;- 1:p} # or just p? else {ARLags &lt;- 0} if (q&gt;0) {MALags &lt;- 1:q} # or just q? else{MALags &lt;- 0} # Estimate the model CPI_fit &lt;- arma(CPI, order=c(ARLags, MALags), include.intercept = TRUE) # Save the criteria in a P x Q matrix AIC[p+1, q+1] &lt;- CPI_fit$aic BIC[p+1, q+1] &lt;- CPI_fit$bic } }
  • 现在它给了我错误:Error in AIC[p + 1, q + 1] &lt;- CPI_fit$aic : number of items to replace is not a multiple of replacement length
  • 您更改了问题,因此我的答案不再适用,我应该删除我的答案,或者您应该撤消对问题的更改(我猜可能会问一个新问题)。新代码不会在您的问题底部产生错误,现在的问题是arma 的输出不包含名为aic 的列表元素。
  • 你是对的。我把它改回原来的问题。我还用您的“summary(CPI_fit)$aic”更改了代码,但我仍然收到一条错误消息:Error in optim(coef, err, gr = NULL, hessian = TRUE, ...) : function cannot be evaluated at initial parameters
猜你喜欢
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多