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 に答える