R: Ошибка x не является вектором цифр c в adf.test - PullRequest
0 голосов
/ 12 апреля 2020

У меня очень большой набор данных временных рядов, и мне нужно выполнить тест adf для каждого столбца кадра данных, чтобы проверить его на стационарность. Мои данные имеют следующую структуру:

str(AirlineStockData)
Classes ‘spec_tbl_df’, ‘tbl_df’, ‘tbl’ and 'data.frame':    590 obs. of  43 variables:
 $ Index    : Date, format: "2018-01-02" "2018-01-03" "2018-01-04" "2018-01-05" ...
 $ ALGT     : num  154 155 151 150 148 ...
 $ RYAAY    : num  105 107 108 109 110 ...
 $ AAL      : num  53 52.3 52.7 52.6 52.1 ...
 $ CPA      : num  138 137 135 134 132 ...
 $ UAL      : num  68.9 68.5 69.3 69.4 68.5 ...
 $ LUV      : num  66.3 64.9 64.7 64.3 64 ...
 $ SKYW     : num  53 51.3 51.5 51.1 50 ...
 $ ALK      : num  75 74.7 73.8 73.7 72.8 ...
 $ JBLU     : num  22.4 21.6 21.7 21.4 21.3 ...
 $ ATSG     : num  23.4 24.1 24.7 25 23.9 ...
 $ AZUL     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ GOL      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ LTM      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ AVH      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ VLRS     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ GRPAF    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ DAL      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ SAVE     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ HA       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ MESA     : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ZNH      : num  50.5 53.8 54.2 58 57.2 ...
 $ ANTE     : num  5.5 5.5 5.85 6.3 5.85 5.95 6.05 6.05 6.05 NA ...
 $ 200152.SZ: num  15 15.4 15.3 15.6 15.8 ...
 $ HMCTF    : num  0.97 0.98 0.98 0.98 0.98 0.98 0.98 0.98 0.98 NA ...
 $ CEA      : num  36.2 38.3 38.5 41.7 39.4 ...
 $ AIRYY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ALNPY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ JAPSY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ CPCAY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ CEBUY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ SINGY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ NAS.OL   : num  NA NA NA NA NA NA NA NA NA NA ...
 $ IAG.L    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ LHA.DE   : num  NA NA NA NA NA NA NA NA NA NA ...
 $ AIRF.VI  : num  NA NA NA NA NA NA NA NA NA NA ...
 $ AFLYY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ DLAKY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ TUIFY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ ICAGY    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ EJTTF    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ DRTGF    : num  NA NA NA NA NA NA NA NA NA NA ...
 $ TKHVY    : num  NA NA NA NA NA NA NA NA NA NA ...
 - attr(*, "spec")=
  .. cols(
  ..   Index = col_date(format = ""),
  ..   ALGT = col_double(),
  ..   RYAAY = col_double(),
  ..   AAL = col_double(),
  ..   CPA = col_double(),
  ..   UAL = col_double(),
  ..   LUV = col_double(),
  ..   SKYW = col_double(),
  ..   ALK = col_double(),
  ..   JBLU = col_double(),
  ..   ATSG = col_double(),
  ..   AZUL = col_double(),
  ..   GOL = col_double(),
  ..   LTM = col_double(),
  ..   AVH = col_double(),
  ..   VLRS = col_double(),
  ..   GRPAF = col_double(),
  ..   DAL = col_double(),
  ..   SAVE = col_double(),
  ..   HA = col_double(),
  ..   MESA = col_double(),
  ..   ZNH = col_double(),
  ..   ANTE = col_double(),
  ..   `200152.SZ` = col_double(),
  ..   HMCTF = col_double(),
  ..   CEA = col_double(),
  ..   AIRYY = col_double(),
  ..   ALNPY = col_double(),
  ..   JAPSY = col_double(),
  ..   CPCAY = col_double(),
  ..   CEBUY = col_double(),
  ..   SINGY = col_double(),
  ..   NAS.OL = col_double(),
  ..   IAG.L = col_double(),
  ..   LHA.DE = col_double(),
  ..   AIRF.VI = col_double(),
  ..   AFLYY = col_double(),
  ..   DLAKY = col_double(),
  ..   TUIFY = col_double(),
  ..   ICAGY = col_double(),
  ..   EJTTF = col_double(),
  ..   DRTGF = col_double(),
  ..   TKHVY = col_double()
  .. )

Мой код для запуска теста для каждого столбца следующий:

library(tseries)
library(vars)

lags <- NULL
p_value <- NULL
DickeyFuller <- NULL

for (i in 1:ncol(x)) {
  z <- na.omit(x[,i])
  AIC_lag <- VARselect(z)
  df_test_results <- adf.test(z, k=AIC_lagAIC_lag[["selection"]][["AIC(n)"]])
  tmp_p <- df_test_results[["p.value"]]
  tmp_df <- df_test_results[["statistic"]][["Dickey-Fuller"]]
  lags <- rbind(lags,AIC_lag[["selection"]][["AIC(n)"]])
  p_value <- rbind(p_value,tmp_p)
  DickeyFuller <- rbind(DickeyFuller,tmp_df)
}

output <- data.frame(lags,p_value,DickeyFuller)
row.names(output) <- names(x)

Если я оставлю данные как объект фрейма данных, то я получить следующую ошибку:

Error in adf.test(z, k = AIC_lagAIC_lag[["selection"]][["AIC(n)"]]) : x is not a vector or univariate time series

Несмотря на то, что z, очевидно, является числовым c вектором. Я могу исправить эту ошибку, объявив x объектом zoo, используя следующий код:

library(zoo)
x <- as.zoo(x,order.by=row.names(x))

Однако, если x является объектом zoo, я получаю следующую ошибку в функции VARselect:

Error in y - z$residuals : non-numeric argument to binary operator

Однако эта ошибка не имеет большого смысла. Поскольку x - это числовой c вектор, остатки должны быть числительными c. Я не уверен, почему r выдаёт мне эти ошибки на явно числовых c векторах или как решить эту проблему. Любой совет помогает, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...