如何将 `lapply` 函数应用于一组时间序列数据集
How to apply `lapply` function to a set of time series data set
我有时间序列数据。数据包含几年的四个单变量时间序列列。我想将 ARIMA
模型拟合到前 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
以下代码无法正常工作,因为它只给了我 4 个值。但是,我接受它给我 16 个值(4 年,每年 4 个单变量时间序列)
Arima.model <- lapply(1:4, function(i)auto.arima(Logreturns[[i]][,i]))
我认为您需要的是双 lapply
,一个用于遍历每个列表,另一个用于遍历列表的每一列。
result <- unlist(lapply(seq_along(Logreturns), function(i)
lapply(seq_len(ncol(Logreturns[[i]])), function(j)
auto.arima(Logreturns[[i]][,j]))), recursive = FALSE)
我有时间序列数据。数据包含几年的四个单变量时间序列列。我想将 ARIMA
模型拟合到前 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
以下代码无法正常工作,因为它只给了我 4 个值。但是,我接受它给我 16 个值(4 年,每年 4 个单变量时间序列)
Arima.model <- lapply(1:4, function(i)auto.arima(Logreturns[[i]][,i]))
我认为您需要的是双 lapply
,一个用于遍历每个列表,另一个用于遍历列表的每一列。
result <- unlist(lapply(seq_along(Logreturns), function(i)
lapply(seq_len(ncol(Logreturns[[i]])), function(j)
auto.arima(Logreturns[[i]][,j]))), recursive = FALSE)