Tag Archives: shiny

screenshot of www.dataseries.org

Forecasting GDP with R and dataseries.org

The website dataseries.org aims to be Switzerland’s FRED – a free comprehensive database of Swiss time series. Powered by R and written in Shiny (also using a bit of JavaScript) it allows you to quickly search and explore a large number of data series.

Switzerland’s time series in one place

Similarly to the United States, public data in Switzerland is produced by a large number of different offices, which makes it hard to find any particular series. dataseries.org provides a structured and automatically updated collection of most of these series. We are still working on the data input, but are pretty much complete in the field of Economics.

You can download the data as spreadsheets or graphs, or embed interactive widgets in your website. Alternatively, you can import the data directly into R, using the dataseries package. Install the package from CRAN,


and run the ds function with the id argument that you find on the website:

plot(dataseries::ds("GDP.PBRTT.A.R", "ts"), 
     ylab = "mio CHF, at 2010 prices, s. adj.", 
     main = "Gross Domestic Product")


This will give you an R plot of Switzerland’s GDP. (The data is cached, so calling the function again will not re-download until you restart the R session.)

Live Import of Series to R

In the following, I will use data from dataseries.org to produce a live forecast of Switzerland’s GDP. Each day the model is run, it will be ensured that the latest data is used. That way it is possible to produce a transparent and up-to-date forecast. For the following exercise, I will only use tools from R base, but it is of course possible to use the same data in a more advanced modeling framework.

In order to produce a reasonable forecast, we want to track early information on the business cycle, which is mostly survey data. We will use a question from the SECO Consumer Confidence Survey on current economic performance, the Credit Suisse / Procure Purchasing Managers’ Index and the ETHZ KOF Barometer.

Transforming the data

Getting these indicators from dataseries.org directly into R is easy. Because these data are measured at different frequencies, we need to convert them to the same quarterly frequency as GDP. There are many packages that offer functions for that (e.g., the tempdisagg package has functions to move both to higher or lower frequencies), but I will stick to basic R here:

# Aggregating months to quarters (post updated on May 6, 2017)
to_quarterly <- function(x){
 aggregate(x, nfrequency = 4, FUN = mean)

pmi <- to_quarterly(dataseries::ds("PMI.SA.PM", "ts"))
kof <- to_quarterly(dataseries::ds("KOF.KFBR", "ts"))
csent <- dataseries::ds("CCI.GEPC", "ts")

A plot of these series shows the common trend in these variables and gives you an indication of the business cycle, which may have turned upward in recent months.

plot(cbind(pmi, kof, csent), main = "Business Cycle Indicators")


Since these series are stationary, our left hand side variable should be stationary as well. This is accomplished by calculating percentage change rates of GDP:

gdp.level <- dataseries::ds("GDP.PBRTT.A.R", "ts")
gdp <- (gdp.level / lag(gdp.level, -1)) - 1

ARIMA modelling

R’s workhorse for time series modeling is the arima function, which allows you to construct a univariate or multivariate model of GDP growth. Since the data is seasonally adjusted, a simple autoregressive process (AR1) offers a good benchmark:

# AR1
m0 <- arima(gdp, order = c(1, 0, 0))
fct0 <- predict(m0, n.ahead = 1)$pred
# GDP Growth Q1: +0.3 

If you need advice on which ARIMA model to choose, the information criterions, accessed by the R functions AIC or BIC, can help you to choose a model. Simply take the model with lowest information criterion. The auto.arima function from the forecast package also allows you to do the selection automatically.

We can include our series individually or jointly and estimate a range of different models. A good model (in terms of the AIC information criterion) is the following, which uses PMI and KOF data (but not consumer sentiment data):

dta <- window(cbind(pmi, kof), start = start(pmi), end = end(pmi))
m1 <- arima(window(gdp, start = start(dta)), 
            xreg = window(dta, end = end(gdp)))
fct1 <- predict(m1, n.ahead = 1, 
                newxreg = window(dta, start = tsp(gdp)[2] + 0.25,
                                 end = tsp(gdp)[2] + 0.25)
# GDP Growth Q1: +0.7

The model’s forecast for the first quarter of 2017 is 0.7 – a value that hasn’t been reached for more than two years.

A factor model

If you have multiple indicators at hand, a common problem is multicollinearity, the fact that indicators are correlated, and therefore too many indicators deteriorate the quality of the model estimation.

An easy fix is to use a factor model, where the indicators are summarized in a few factors, which can be calculated by principal components (see Stock and Watson 2002):

# PMI, KOF, Consumer Sentiment, first Principal Component
pca <- prcomp(window(cbind(pmi, kof, csent), start = start(pmi), 
                     end = tsp(gdp)[2] + 0.25),
             scale. = TRUE)
dta.pca <- ts(pca$x[, 'PC1'], start = start(pmi), frequency = 4)

m2 <- arima(window(gdp, start = start(dta)), 
            xreg = window(dta.pca, end = end(gdp)))
fct2 <- predict(m2, n.ahead = 1, 
                newxreg = window(dta.pca, start = tsp(gdp)[2] + 0.25)
# GDP Growth Q1: +0.7

Again, we get a forecast value of 0.7. Overall, survey data indicates that the economy is well on track. Let’s do a graphical comparison of our forecasts:

# skeletons to include forecasts 
gdp.fct0 <- window(gdp, extend = TRUE, end = tsp(gdp)[2] + 0.25)
gdp.fct1 <- gdp.fct2 <- gdp.fct0

# plug forecasts into skeletons
window(gdp.fct0, start = end(gdp.fct0)) <- fct0
window(gdp.fct1, start = end(gdp.fct1)) <- fct1
window(gdp.fct2, start = end(gdp.fct2)) <- fct2

ts.plot(window(cbind(gdp, gdp.fct0, gdp.fct1, gdp.fct2), 
               start = 2010), 
        col = 1:4, ylab = "quarterly growth rates, s. adj.", 
        main = "GDP Forecasts")
legend("topright", legend = c("GDP Growth Rate", "AR 1 Forecast", 
                              "PMI, KOF", "Principal Component"), 
       lty = 1, col = 1:4, bty = "n")


Publication of first quarter GDP is on June 1, 2017. See you in a month!


Shiny-based Online Tool for X-13 Seasonal Adjustment: New Features

The R package seasonal makes it easy to use X-13ARIMA-SEATS, the seasonal adjustment software by the U.S. Census Bureau. In a previous post, I wrote about www.seasonal.website, a Shiny-based website showcasing the use of seasonal. Even if you are not using R, the website allows you to upload and adjust your own series, without the need for any software installation.

The latest version of www.seasonal.website comes with several new features:

Live Parsing of X-13 spc Files

The main new feature is a live parser of X-13 spc files. Changes in the Options, triggered by the pull-down menus, or changes in the R Call, are reflected in an updated X-13 Call. On the other hand, changes in the X-13 Call will be reflected in updates in the Options and the R Call.

manipulate the X-13 spec file

Interactively manipulate the X-13 spec file or the R call

This brings interesting new possibilities:

  • Non-R-users may use the website to generate spc files, which they can use in any software that includes X-13ARIMA-SEATS.
  • People familiar with X-13 may use the spc syntax to learn about the syntax of the R-package seasonal.
  • People familiar with the R-package seasonal may use it learn about the spc syntax.

New Upload/Download Dialog

The upload/download feature has been reworked. A button on the top-right corner opens a new upload and download dialog.

New upload/download dialog

New upload/download dialog

Both XLSX and CSV formats are supported. You can upload and adjust your own monthly or quarterly time series. All data will be permanently deleted after your session.

Nice Summary

The summary, previously just the printed output of the R-function summary, has been overhauled. Colored flags indicate the significance level of the coefficients, reddish colors indicate warning signs from the tests.

New Summary

New Summary

New Online Tool for Seasonal Adjustment

Seasonal adjustment of time series can be a hassle. The softwares used by statistical agencies (X-13, X-12, TRAMO-SEATS) have tons of fantastic options, but the steep learning curve prevents users from taking advantage of the functionality of these packages, or from using them at all.

The R package seasonal simplifies the task by providing an interface to X-13, the newest seasonal adjustment software by the US Census Bureau. It combines and extends the capabilities of the older X-12ARIMA and TRAMO-SEATS software packages. The most simple use of seasonal requires the application of the main function to a time series, which invokes automated procedures that work well in many circumstances:


A new shiny based website is showcasing the use of seasonal and allows for online adjustment of time series, without the need to download and install seasonal. The AirPassengers series is set as the default series, but can be replaced by any uploaded series. There are other demo series that show the use of the software to adjust Indian Diwali or Chinese New Year effects.

The site allows to adjust most parameters of X-13, and to view and download a substantial part of its output. Frequently used options can be chosen from a drag and drop menu, while less often used options can be chosen by manipulating the R-Call itself.

Here are some of the most interesting features of the website:

Frequently Used Options

Frequently used options of X-13 can be modified using the drop down selectors. Each change will result in a re-estimation of the seasonal adjustment model. The R-call, the output and the summary are updated accordingly.

Frequently Used Options

Choosing the Output

A substantial part of the output of X-13ARIMA-SEATS can be shown on the website. Click and drag to zoom into the graph. Double click to restore the original view.

A substantial part of the output of X-13ARIMA-SEATS can be shown on the website.

Manipulating the R-Call

The R-Call to seasonal can be modified and run online. In the picture below, the ARIMA model has been adjusted to include an autoregressive parameter of order 2. Press the button to execute the modified call.

Manipulating the R Call

Upload and Download

User defined series can be uploaded, importing from Excel or CSV. Also, all viewable series can be downloaded as Excel or CSV.

Upload and Download

Chinese New Year, Indian Diwali

Chinese New Year or Indian Diwali support is included out of the box and can be selected from the drop down menu. Adjustment for these holidays is as easy as adjusting Easter effects.

Adjusting Chinese New Year or Indian Diwali Effects

Running X-13 Examples Online

The examples from the official manual of X-13 can be run directly on the website. The collection of examples can found here.

Examples of X 13ARIMA SEATS in R

Try it out!