#r
#r
Вопрос:
У меня есть данные временных рядов. Он содержит 4 одномерные случайные величины за 4 года. После того, как я подобрал ARIMA
модель, я попытался связать список из 4 переменных по 4 года в столбцах. Столбец для каждой переменной за ее 4 года. Мой код работает хорошо, но он очень длинный. Я хотел бы упростить свой код, поскольку мне нужно повторить эти шаги для других наборов данных.
library(ggplot2)
library(forecast)
library(tseries)
library(zoo)
library(dplyr)
library(data.table)
data("EuStockMarkets")
dat <- EuStockMarkets
res <- lapply(split(as.zoo(EuStockMarkets), as.integer(time(EuStockMarkets))), as.ts)
datNew <- lapply(5:8, function(i) ts(res[[i]]))
dat.log <- lapply(1:4, function(i) log(datNew[[i]]))
dat.diff <- lapply(1:4, function(i)diff(dat.log[[i]]))
Logreturns <- dat.diff
result <- unlist(lapply(seq_along(Logreturns), function(i)
lapply(seq_len(ncol(Logreturns[[i]])), function(j)
auto.arima(Logreturns[[i]][,j]))), recursive = FALSE)
Resd <- lapply(1:16, function(i) result[[i]]$residuals)
## cbind the data
ResCb1 <- cbind(Resd[[1]], Resd[[2]],Resd[[3]], Resd[[4]])
ResCb2 <- cbind(Resd[[5]], Resd[[6]],Resd[[7]], Resd[[8]])
ResCb3 <- cbind(Resd[[9]], Resd[[10]],Resd[[11]], Resd[[12]])
ResCb4 <- cbind(Resd[[13]], Resd[[14]],Resd[[15]], Resd[[16]])
Resi <- rbind(ResCb1, ResCb2, ResCb3, ResCb4)
Ответ №1:
Вы могли result
бы немного изменить шаг, чтобы получить данные в требуемой форме :
Resi_1 <- do.call(rbind, lapply(seq_along(Logreturns), function(i)
sapply(seq_len(ncol(Logreturns[[i]])), function(j)
auto.arima(Logreturns[[i]][,j])$residuals)))
head(Resi_1)
# [,1] [,2] [,3] [,4]
#[1,] -0.006382935 -0.0072788740 -0.014522115 0.0033533708
#[2,] -0.010862950 -0.0111559902 -0.017582871 -0.0104631445
#[3,] 0.010944002 -0.0007869286 -0.006886715 -0.0006927197
#[4,] -0.008772532 -0.0007869286 0.000000000 -0.0006600991
#[5,] -0.004951663 -0.0070833375 0.002495289 -0.0005948590
#[6,] 0.001921861 0.0068779897 0.008395646 -0.0052699842