We study a weekly univariate series: the business applications component of the Business Formation Statistics, or bfs for short. (Weekly data as of week 27 of 2020, downloaded on July 14, 2020 (11:27 AM), U.S. Census Bureau, obtained from https://www.census.gov/econ/bfs/index.html.) We consider the non-seasonally adjusted data at the national level. This component is the main business applications series, which captures the weekly flow of IRS applications for Employer Identification Numbers, mainly for business purposes.
This code installs and loads the packages, and loads the data into a variable named bfs.
library(devtools) library(Rcpp) devtools::install_github("tuckermcelroy/sigex") library(sigex)
begin <- c(2006,1) end <- c(2020,27) period <- 52
dataALL.ts <- sigex.load(bfs[,3:6],begin,period, c("bfs-ba","bfs-hba","bfs-wba","bfs-cba"),FALSE)
transform <- "log" aggregate <- FALSE subseries <- 1 range <- NULL data.ts <- sigex.prep(dataALL.ts,transform,aggregate,subseries,range,TRUE)
# raw data par(mfrow=c(1,1)) for(i in 1:length(subseries)) { sigex.specar(data.ts,FALSE,i,period) }
# growth rates par(mfrow=c(1,1)) for(i in 1:length(subseries)) { sigex.specar(data.ts,TRUE,i,period) }
N <- dim(data.ts)[2] T <- dim(data.ts)[1]
first.day <- 1 all.date <- weekly2date(first.day,begin,T) start.date <- all.date[[1]] end.date <- all.date[[2]]
easter.path <- system.file('extdata','easter500.txt',package='sigex') easter.dates <- read.table(easter.path) easter.reg <- gethol(easter.dates,7,0,start.date,end.date) nyd.path <- system.file('extdata','newyear500.txt',package='sigex') nyd.dates <- read.table(nyd.path) nyd.reg <- gethol(nyd.dates,7,0,start.date,end.date) mlk.path <- system.file('extdata','mlk500.txt',package='sigex') mlk.dates <- read.table(mlk.path) mlk.reg <- gethol(mlk.dates,7,0,start.date,end.date) gw.path <- system.file('extdata','gw500.txt',package='sigex') gw.dates <- read.table(gw.path) gw.reg <- gethol(gw.dates,7,0,start.date,end.date) mem.path <- system.file('extdata','mem500.txt',package='sigex') mem.dates <- read.table(mem.path) mem.reg <- gethol(mem.dates,7,0,start.date,end.date) ind.path <- system.file('extdata','ind500.txt',package='sigex') ind.dates <- read.table(ind.path) ind.reg <- gethol(ind.dates,7,0,start.date,end.date) labor.path <- system.file('extdata','labor500.txt',package='sigex') labor.dates <- read.table(labor.path) labor.reg <- gethol(labor.dates,7,0,start.date,end.date) col.path <- system.file('extdata','columbus500.txt',package='sigex') col.dates <- read.table(col.path) col.reg <- gethol(col.dates,7,0,start.date,end.date) vet.path <- system.file('extdata','vet500.txt',package='sigex') vet.dates <- read.table(vet.path) vet.reg <- gethol(vet.dates,7,0,start.date,end.date) tg.path <- system.file('extdata','thanksgiving500.txt',package='sigex') tg.dates <- read.table(tg.path) tg.reg <- gethol(tg.dates,7,0,start.date,end.date) xmas.path <- system.file('extdata','xmas500.txt',package='sigex') xmas.dates <- read.table(xmas.path) xmas.reg <- gethol(xmas.dates,7,0,start.date,end.date) black.path <- system.file('extdata','black400.txt',package='sigex') black.dates <- read.table(black.path) black.reg <- gethol(black.dates,7,0,start.date,end.date)
easter.reg <- sigex.daily2weekly(easter.reg,first.day,start.date) easter.reg <- rowSums(easter.reg)/7 nyd.reg <- sigex.daily2weekly(nyd.reg,first.day,start.date) nyd.reg <- rowSums(nyd.reg)/7 mlk.reg <- sigex.daily2weekly(mlk.reg,first.day,start.date) mlk.reg <- rowSums(mlk.reg)/7 gw.reg <- sigex.daily2weekly(gw.reg,first.day,start.date) gw.reg <- rowSums(gw.reg)/7 mem.reg <- sigex.daily2weekly(mem.reg,first.day,start.date) mem.reg <- rowSums(mem.reg)/7 ind.reg <- sigex.daily2weekly(ind.reg,first.day,start.date) ind.reg <- rowSums(ind.reg)/7 labor.reg <- sigex.daily2weekly(labor.reg,first.day,start.date) labor.reg <- rowSums(labor.reg)/7 col.reg <- sigex.daily2weekly(col.reg,first.day,start.date) col.reg <- rowSums(col.reg)/7 vet.reg <- sigex.daily2weekly(vet.reg,first.day,start.date) vet.reg <- rowSums(vet.reg)/7 tg.reg <- sigex.daily2weekly(tg.reg,first.day,start.date) tg.reg <- rowSums(tg.reg)/7 xmas.reg <- sigex.daily2weekly(xmas.reg,first.day,start.date) xmas.reg <- rowSums(xmas.reg)/7 black.reg <- sigex.daily2weekly(black.reg,first.day,start.date) black.reg <- rowSums(black.reg)/7
mdl <- NULL mdl <- sigex.add(mdl,seq(1,N),"sarma",c(1,1,1,1,52),NULL,"process",1) mdl <- sigex.meaninit(mdl,data.ts,0)
constraint <- NULL par.mle <- sigex.default(mdl,data.ts,constraint) psi.mle <- sigex.par2psi(par.mle,mdl) fit.mle <- sigex.mlefit(data.ts,par.mle,constraint,mdl,"bfgs",debug=FALSE) psi.mle <- sigex.eta2psi(fit.mle[[1]]$par,constraint) hess <- fit.mle[[1]]$hessian par.mle <- fit.mle[[2]]
r sigex.lik(psi.mle,mdl,data.ts)
.mdl <- NULL mdl <- sigex.add(mdl,seq(1,N),"sarma",c(1,1,1,1,52),NULL,"process",1) mdl <- sigex.meaninit(mdl,data.ts,0) mdl <- sigex.reg(mdl,1,ts(as.matrix(easter.reg),start=start(easter.reg), frequency=period,names="Easter")) mdl <- sigex.reg(mdl,1,ts(as.matrix(nyd.reg),start=start(nyd.reg), frequency=period,names="NewYearDay")) mdl <- sigex.reg(mdl,1,ts(as.matrix(mlk.reg),start=start(mlk.reg), frequency=period,names="MLK")) mdl <- sigex.reg(mdl,1,ts(as.matrix(gw.reg),start=start(gw.reg), frequency=period,names="GeorgeWashington")) mdl <- sigex.reg(mdl,1,ts(as.matrix(mem.reg),start=start(mem.reg), frequency=period,names="MemorialDay")) mdl <- sigex.reg(mdl,1,ts(as.matrix(ind.reg),start=start(ind.reg), frequency=period,names="IndependenceDay")) mdl <- sigex.reg(mdl,1,ts(as.matrix(labor.reg),start=start(labor.reg), frequency=period,names="LaborDay")) mdl <- sigex.reg(mdl,1,ts(as.matrix(col.reg),start=start(col.reg), frequency=period,names="ColumbusDay")) mdl <- sigex.reg(mdl,1,ts(as.matrix(vet.reg),start=start(vet.reg), frequency=period,names="VeteransDay")) mdl <- sigex.reg(mdl,1,ts(as.matrix(tg.reg),start=start(tg.reg), frequency=period,names="Thanksgiving")) mdl <- sigex.reg(mdl,1,ts(as.matrix(xmas.reg),start=start(xmas.reg), frequency=period,names="Xmas")) mdl <- sigex.reg(mdl,1,ts(as.matrix(black.reg),start=start(black.reg), frequency=period,names="BlackFriday"))
constraint <- NULL par.mle <- sigex.default(mdl,data.ts,constraint) psi.mle <- sigex.par2psi(par.mle,mdl) fit.mle <- sigex.mlefit(data.ts,par.mle,constraint,mdl,"bfgs",debug=FALSE) psi.mle <- sigex.eta2psi(fit.mle[[1]]$par,constraint) hess <- fit.mle[[1]]$hessian par.mle <- fit.mle[[2]]
r sigex.lik(psi.mle,mdl,data.ts)
.print(eigen(hess)$values)
resid.mle <- sigex.resid(psi.mle,mdl,data.ts)[[1]] resid.mle <- sigex.load(t(resid.mle),start(data.ts),frequency(data.ts), colnames(data.ts),TRUE) resid.acf <- acf(resid.mle,lag.max=4*53,plot=TRUE)$acf
AO.times <- 314 dataNA.ts <- data.ts dataNA.ts[AO.times] <- NA
mdl <- NULL mdl <- sigex.add(mdl,seq(1,N),"sarma",c(1,1,1,1,52),NULL,"process",1) mdl <- sigex.meaninit(mdl,dataNA.ts,0) mdl <- sigex.reg(mdl,1,ts(as.matrix(nyd.reg),start=start(nyd.reg), frequency=period,names="NewYearDay")) mdl <- sigex.reg(mdl,1,ts(as.matrix(mlk.reg),start=start(mlk.reg), frequency=period,names="MLK"))
constraint <- NULL par.mle <- sigex.default(mdl,dataNA.ts,constraint) psi.mle <- sigex.par2psi(par.mle,mdl) fit.mle <- sigex.mlefit(dataNA.ts,par.mle,constraint,mdl,"bfgs",debug=FALSE) psi.mle <- sigex.eta2psi(fit.mle[[1]]$par,constraint) hess <- fit.mle[[1]]$hessian par.mle <- fit.mle[[2]]
r sigex.lik(psi.mle,mdl,data.ts)
.sigex.tstats(mdl,psi.mle,hess,constraint)
resid.mle <- sigex.resid(psi.mle,mdl,dataNA.ts)[[1]] resid.mle <- sigex.load(t(resid.mle),start(data.ts), frequency(data.ts),colnames(data.ts),TRUE) resid.acf <- acf(resid.mle,lag.max=4*53,plot=FALSE)$acf par(mfrow=c(N,N),mar=c(3,2,2,0)+0.1,cex.lab=.8,cex.axis=.5,bty="n") for(j in 1:N) { for(k in 1:N) { plot.ts(resid.acf[,j,k],ylab="",xlab="Lag",ylim=c(-1,1),cex=.5) abline(h=1.96/sqrt(T),lty=3) abline(h=-1.96/sqrt(T),lty=3) } }
sigex.portmanteau(resid.mle,4*period,length(psi.mle)) sigex.gausscheck(resid.mle)
data.casts <- sigex.midcast(psi.mle,mdl,dataNA.ts,0)
analysis.mle <- sigex.bundle(dataNA.ts,transform,mdl,psi.mle)
dataNA.ts <- analysis.mle[[1]] mdl <- analysis.mle[[3]] psi <- analysis.mle[[4]] param <- sigex.psi2par(psi,mdl,dataNA.ts)
reg.trend <- sigex.fixed(data.ts,mdl,1,param,"Trend") reg.nyd <- sigex.fixed(data.ts,mdl,1,param,"NewYearDay") reg.mlk <- sigex.fixed(data.ts,mdl,1,param,"MLK") dataLIN.ts <- data.ts - ts(reg.trend + reg.nyd + reg.mlk, start=start(data.ts),frequency=period)
week.period <- 365.25/7 half.len <- floor(week.period/2) x11.filters <- x11filters(week.period,1) trend.filter <- x11.filters[[1]] seas.filter <- x11.filters[[2]] sa.filter <- x11.filters[[3]] shift <- (dim(sa.filter)[3]-1)/2
trend.comp <- sigex.adhocextract(psi,mdl,dataNA.ts,trend.filter,half.len,0,TRUE) sa.comp <- sigex.adhocextract(psi,mdl,dataNA.ts,sa.filter,shift,0,TRUE) AO.errs <- dataLIN.ts[AO.times] - data.casts[[1]] sa.comp[[1]][AO.times] <- sa.comp[[1]][AO.times] + AO.errs
trendcol <- "tomato" cyccol <- "orchid" seascol <- "seagreen" sacol <- "navyblue" fade <- 60 plot(data.ts) sigex.graph(trend.comp,reg.trend,start(data.ts), period,1,0,trendcol,fade) sigex.graph(sa.comp,reg.trend,start(data.ts), period,1,0,sacol,fade)
sigex.specar(sa.comp[[1]],FALSE,1,period)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.