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
这是什么意思,我该如何预防?
答案 0 :(得分: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)
arma
的第二个正式版order
是您order(ARLags, MALags)
提供的order = order(ARLags, MALags)
。这意味着对于函数调用我们有
order
来自上面使用的功能 order
的{{3}}:
sort.list
返回一个排列,它将第一个参数重新排列为升序或降序,通过进一步的参数打破关系。tseries::arma
是相同的,只使用一个参数。
(强调我的)这种排列用于对数据进行排序,是一个与输入长度相同的向量。同时,order
,description
order[1]
二维整数向量,使模型的顺序适合。order[2]
对应于AR部分,arma
对应于MA部分。
这就是冲突。 p = 0
需要二维整数向量,但提供一维向量,因为ARlags = 0
然后是order(0) = 1
和{{ 1}}。
您想要提供arma
的内容是order = c(p,q)
- AR和MA部分中的最大滞后期限。试试这个
CPI_fit <- arma(CPI, c(p, q), include.intercept = TRUE)