首页 > 解决方案 > 如何将`lapply`函数应用于一组时间序列数据集

问题描述

我有时间序列数据。数据包含几年内的四个单变量时间序列列。我想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]))

标签: rlapply

解决方案


我认为您需要的是 double lapply,一个迭代每个列表,另一个迭代列表的每一列。

result <- unlist(lapply(seq_along(Logreturns), function(i) 
                 lapply(seq_len(ncol(Logreturns[[i]])), function(j)
                        auto.arima(Logreturns[[i]][,j]))), recursive = FALSE)

推荐阅读