У меня очень большой набор данных временных рядов, и мне нужно выполнить тест 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 векторах или как решить эту проблему. Любой совет помогает, спасибо.