2

我正在使用 auto.arima 处理大型数据集。数据集富含零。排名不足的大多数问题都可以,但是我仍然不知道如何处理“NN 类型”的数据。它与“PP 类型”非常相似(它计算得很好)。NN 类型在我的数据中非常少见。任何想法如何解决这个问题,或者至少如何快速检测 NN 类型?

library(forecast)
NN<-matrix(c(2, 2,2, 1, 1,1   ,
       0, 0,0,0,0,1 ,
       0, 0,0,1,1,0),
       nrow=6)
PP<-matrix(c(2, 2,2, 1, 1,1   ,
         0, 0,0,0,0,1 ,
         0, 0,1,1,1,0),
       nrow=6)
qty<-rpois(6,3000)
auto.arima(qty)
auto.arima(qty, xreg=PP)
auto.arima(qty, xreg=NN)
4

1 回答 1

1

分析该auto.arima函数的代码,很容易找到用于检查矩阵秩亏的代码。我建议以下功能:

is.rankdeficient <- function(xregg) {
  constant_columns <- apply(xregg, 2, is.constant)
  if (any(constant_columns)) {
    xregg <- xregg[, -which(constant_columns)[1]]
  }
  sv <- svd(na.omit(cbind(rep(1, NROW(xregg)), xregg)))$d
  min(sv)/sum(sv) < .Machine$double.eps
}


is.rankdeficient(PP)
# [1] FALSE

is.rankdeficient(NN)
# [1] TRUE
于 2018-10-15T13:16:50.263 回答