R中使用循环和季节性调整以及多变量时间序列

时间:2016-06-25 18:52:01

标签: r loops time-series

我的目标是季节性调整数据并仅保存季节性因素。 我的数据包含60多个时间序列。如你所见,我的一个问题是那里 是我需要立即调整的很多时间序列。这是我尝试在R中执行此操作:

library("timeDate")
library("timeSeries")
library("seasonal")

mDxts <- structure(c(35.8, 41.6, 35.9, 36.9, 42.43, 36.067,28.67, 29.53, 32.83, 29.867,23.9, 20.8, 21.167, NA, NA, NA, NA, NA, NA, NA, 149.67,108.89, 89.067, 83.33, 77.2,64.91, 50.2, 48, 62.13, 52.93,43.2, 38.8, 37.9, 19, 18, 17, 16.5, 16, 15.5, 15), class = c("xts","zoo"), .indexCLASS = "yearqtr", tclass = "yearqtr", .indexTZ = "", tzone = "", index = structure(c(946684800,954547200, 962409600, 970358400, 978307200, 986083200, 993945600,1001894400, 1009843200, 1017619200, 1025481600, 1033430400, 1041379200,1491004800, 1498867200, 1506816000, 1514764800, 1522540800, 1530403200,1538352000), tzone = "", tclass = "yearqtr"), .Dim = c(20L, 2L), .Dimnames = list(NULL, c("depall", "ref"))) 
ll<-lapply(mDxts, function(e) ts(e,start=c(2000,1),frequency=4))
#I. Seasonal adjustment and saving only d10 component:
sf<-sapply(ll,function(e) try(seas(e,x11="",na.action=na.exclude, transform.function = "none",x11.mode="logadd",arima.model="(0 1 1) (0 1 0)",regression.aictest = NULL, outlier=NULL,x11.save="d10")))

据我了解,我的主要问题是执行sf<-sapply(st,function(e) try(seas(e, x11.save="d10"))我获得了一个列表,其中每个元素都是一个包含所有d10,d11等的列表(请按SF.df<-as.data.frame(SF)查看)。

1 个答案:

答案 0 :(得分:2)

好吧,时间过去了,现在我能够回答问题了。 我需要同时季节性地调整大量数据,然后一次重新计算它们。

  1. 首先,一个问题是季节性调整的结果被保存为列表。答案是使用final中的函数seasonal

    sa<-sapply(st,function(e) try(final(seas(e,x11="",na.action=na.exclude,
    transform.function = "none",x11.mode="logadd",arima.model="(0 1 1) (0 1 0)",
    regression.aictest = NULL, outlier=NULL))))
    
  2. 要保存季节性因素,需要来自同一个包的函数series

    sf<-sapply(st,function(e) try(series(seas(e,x11="",na.action=na.exclude,
     transform.function = "none",x11.mode="logadd",arima.model="(0 1 1) (0 1 0)",
    regression.aictest = NULL, outlier=NULL),"d10")))