My colleague Udo Sglavo is back, responding to comments on his guest blog from two weeks ago. For fans of SAS and R, he shows how to incorporate results from Hyndman's R model into SAS.
After publishing my blog on replicating Rob J Hyndman’s cross validation idea using SAS Forecast Server, some people were wondering about my statement: “SAS High-Performance Forecasting does not provide access to Hyndman’s ETS method; instead a multiplicative Winter’s method is used (for sake for the example).” SAS provides access to R through SAS/IML software, so shouldn’t it be possible to add R/ETS to a SAS High-Performance Forecasting model repository for comparison reasons?
Well, actually it is possible indeed – so I thought I should following up with an illustration featuring SAS High-Performance Forecasting (the batch engine of SAS Forecast Server).
While some people like to call it revolutionary if commercial vendors provide access to open source algorithms, I would like to consider it as evolutionary, as this has happened in other areas, such as data bases before. As you know SAS High-Performance Forecasting was designed with large-scale automatic forecasting challenges in mind. For automatic forecasting of large numbers of time series, only the most robust models should be used. The goal is to avoid making the analyst manually choose the best model for forecasting each time series. However, SAS High-Performance Forecasting does allow analysts to include their own forecasting modeling algorithms. We like to distinguish between:
- Custom repositories: You can create your own SAS model repository.
- External models: Your forecasts are provided by methods that are external to the SAS.
- User-defined models: You are adding forecasting methods that are not provided by SAS High-Performance Forecasting.
For details see my white paper: “Extending SAS® High-Performance Forecasting Using User-Defined Models and External Forecasts”.
I have to admit that my R coding skills are extremely poor and there might be room for improvement (and I invite you to send me your suggestions). But conceptually, you might find the code (in Part 2) to be a useful starting point.