在R中使用ARIMA创建季节性调整数据

5
我希望为过去22年的每个县生成季节性调整后的失业数据。
美国劳工统计局使用ARIMA对全国失业率进行季节性调整,但不针对各个县。我需要帮助强制R中的ARIMA对每个美国县进行季节性调整。
我可以通过使用auto.arima(mytimeseries)来获得ARIMA模型,但我无法弄清如何减去季节性成分(就像使用(decompose(mytimeseries))$seasonal那样容易)。
该网站https://onlinecourses.science.psu.edu/stat510/?q=book/export/html/51暗示我应该能够仅减去ARIMA残差:
predicteds = oilindex - expsmoothfit$residuals 

但是当我尝试时,它看起来一点也不正确(肉眼观察)--它似乎根本没有识别出季节性变化的大部分。

我想也许auto.arima()选择的模型很差,但当我将该模型与原始数据绘制在同一图上时,它看起来非常好。

这个网站http://www.statoek.wiso.uni-goettingen.de/mitarbeiter/ogi/pub/r_workshop.pdf讲解了如何使用带有序列的predict()进行平滑处理,但我无法使其工作:我无法确定我的data.frame(mytimeseries[date=seq])行是否有误或者arima对象是否具有与gam对象相同的方法,因此预测无法工作。

所以:我如何使用ARIMA从数据中去除季节性?任何帮助都将不胜感激!

以下是我目前的一个示例。(我是R新手,所以无疑,这段代码是次优的。)

# I put unadjusted values for one county at
# http://tmp.webfoot.com/tmp/tmp/unemployment17019.csv
a = read.table("/tmp/unemployment17019.csv", header=FALSE)
# there is probably a simple seven-character way of doing the next line...
all = c(a[1,], a[2,], a[3,], a[4,], a[5,], a[6,], a[7,], a[8,], a[9,], a[10,], a[11,], a[12,], a[13,], a[14,], a[15,], a[16,], a[17,], a[18,], a[19,], a[20,], a[21,], a[22,])
timeseries=ts(as.numeric(all), frequency=12, start=1990)
arimabestfit = forecast::auto.arima(timeseries)
title("Iroquois County", xlab="Date", ylab="Unemployment Rate")
legend(1991,12,c("unadjusted", "adjusted"), col=c("grey", "red"), cex=0.8, lty=1)
plot((timeseries - arimabestfit$residuals), col="red", ylim=c(0,12))
lines(timeseries, col="grey")

all <- c(t(as.matrix(a))) 这行代码可以压缩成一行(未经测试),很抱歉无法帮助您解决主要问题。 - tim riffe
X12-ARIMA不仅仅是ARIMA,可以在这里查看一些论文。它是一款非常复杂的软件,您不应该尝试模拟:有一个R包可以使用,或者可以使用没有R的Census中提供的“裸”X12(现在还有一个使用TRAMO/SEATS代码的全新X13)。SAS中也有一个过程。 - user1220978
3个回答

6

4
X-12-ARIMA是分解季度和月度数据最受欢迎的方法之一,其起源可以追溯到美国人口普查局开发的方法。现在,该方法被美国政府机构以及世界各地的政府机构广泛使用。此方法的早期版本包括X-11和X-11-ARIMA。X-13-ARIMA方法是目前最现代化的标准,它将X-12-ARIMA与TRAMO/SEATS相结合。TRAMO/SEATS代表基于由Victor Gomez和Agustin Maravall(西班牙银行)开发的季节性调整方法的ARIMA模型。您可以在这里找到有关季节性调整的简短介绍:

https://economictheoryblog.com/2017/05/02/seasonal-adjustment/

有一个名为seasonal的可靠R包,它可以在R中实现季节性调整。该R包提供了一个易于使用的界面,以访问美国人口普查局提供的Fortran库。

以下链接提供了一个简短的教程,介绍如何在R中进行季节性调整:

https://economictheoryblog.com/2017/05/16/seasonal-adjustment-in-r/


1

我明白您想要对时间序列进行去季节性处理。我使用http://research.stlouisfed.org/fred2/series/ILIROQ5URN/downloaddata?cid=27976的数据进行演示。

unemploy<-read.table("ILIROQ5URN.txt",header=T,skip=11)
unemploy<-ts(unemploy$VALUE,frequency=12,start(1990,1))

plot(deseason<-stl(unemploy,s.window="periodic"))

plot(unemploy)
lines(deseason$time.series[,2],col="red")

这对你有帮助吗?


谢谢,这很好,但我希望使用人口普查局相同的调整方法,即ARIMA。使用stl()函数,我似乎得到了与我上面提到的decompose()例程几乎相同的结果;也许它们使用相同的算法? - Kaitlin Duck Sherwood
首先,您需要找出人口普查局使用的确切方法。接下来,您需要在R中找到一种实现方法或自己编写一种方法。最后,您应该针对人口普查局提供的Win X-12软件对该方法进行验证。 - Roland
我掌握了人口普查局使用的方法。请参阅http://www.bls.gov/ces/cessa_oview.pdf。我只是希望在R中有比X-ARIMA更简单的东西,但我想这并不是事实。那我就用X-ARIMA吧。感谢您的帮助! - Kaitlin Duck Sherwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接