我正在尝试使用x12
包自动执行季节性调整。为此,我需要一个ts
对象。但是,我不需要一个简单的ts
对象,而是一个已设置开始日期和频率的对象。对于任何给定的系列,我可以输入,但我将提供每月或每周数据的混合。我可以从quantmod
作为xta
对象获取数据,但似乎无法弄清楚如何从xts
中提取频率。
以下是一些示例代码,可以完整地运行,但我想从xts
中提取频率信息,而不是明确设置它:
getSymbols("WILACR3URN",src="FRED", from="2000-01-01") # get data as an XTS
lax <- WILACR3URN #shorten name
laxts <- ts(lax$WILACR3URN, start=c(2000,1), frequency=12) #explicitly it works
plot.ts(laxts)
x12out <- x12(laxts,x12path="c:\\x12arima\\x12a.exe",transform="auto", automdl=TRUE)
laxadj <- as.ts(x12out$d11) # extract seasonally adjusted series
有什么建议吗?或者这是不可能的,我应该明确地确定/提供频率?
由于
答案 0 :(得分:4)
对于这种特定情况,这是未经测试的,但请尝试使用xts::periodicity
作为频率:
freq <- switch(periodicity(lax)$scale,
daily=365,
weekly=52,
monthly=12,
quarterly=4,
yearly=1)
并使用year
个对象的mon
和POSIXlt
元素来计算起始年份和月份。
pltStart <- as.POSIXlt(start(lax))
Start <- c(pltStart$year+1900,pltStart$mon+1)
laxts <- ts(lax$WILACR3URN, start=Start, frequency=freq)
plot.ts(laxts)
答案 1 :(得分:0)
xts :: periodicity建议对我很有帮助。我还发现使用xts :: convertIndex的以下方法适用于月度和季度数据。它未经过每周数据的测试。
require("quantmod")
require("dplyr")
getSymbols("WILACR3URN",src="FRED", from="2000-01-01") # get data as an XTS
lax <- WILACR3URN #shorten name
laxts <- lax %>%
convertIndex("yearmon") %>% # change index of xts object
as.ts(start = start(.), end = end(.)) # convert to ts
plot.ts(laxts)